gpt4 book ai didi

php - 正则表达式匹配并替换多个字符串

转载 作者:可可西里 更新时间:2023-10-31 23:42:23 24 4
gpt4 key购买 nike

我有这个:

$only_left_pattern = '/[^-{]\bleft\b/';
$subject = 'body {left: 24px;}\n p {right:30px;}';
$subject = preg_replace($only_left_pattern, 'right', $subject);
echo $subject;

我需要为每个要匹配的字符串声明一个模式。如果有办法我可以匹配右边或左边并根据那个替换?示例(我头脑中的语法):

$right_left_pattern = '/[^-{](\bleft\b|\bright\b/)';

// if you found left replace with right, if you found right replace with left
// acrording to the order in the pattern
$subject = preg_replace($only_left_pattern, right|left, $subject);

我想问的是,我是否可以使用 PHP 或仅使用正则表达式来执行类似我的示例的操作。

我试过 Dave 的解决方案

$pattern = array('/[^-{]\bleft\b/','/[^-{]\bright\b/');
$replace = array('right','left');
$subject = 'body {left: 24px;} p {right: 24px;}';
$subject = preg_replace($pattern, $replace, $subject);
echo $subject;

但它不起作用,我测试了 regex 不是数组,它正在工作。

最佳答案

第一个问题是您的正则表达式。你有 [^-{] 这意味着你正在检查一个不以 -{ 开头的字符串,但是因为 {left:{ 开头,匹配忽略它。我想你想说的只是替换 left 这个词。要仅替换字符串的一部分,您需要像这样使用反向引用:

$pattern = '/([-{]\b)(left)(\b)/';
$replace = '$1right$3';
$subject = 'body {left: 24px;} p {right: 24px;}';
$subject = preg_replace($pattern, $replace, $subject);

// result: body {right: 24px;} p {right: 24px;}
echo $subject;

注意 $pattern 中的括号。那就是将这些部分组合在一起。还要注意 $replace 中的 $n。第一个括号组([-{]\b)$1,第二个(left)$2 ,第三个 (\b)$3

现在解决了替换 left -> right 但你不能按照建议的那样做数组,因为这会发生:

body {left: 24px;} p {right: 24px;}

Step 1: replace left pattern
body {right: 24px;} p {right: 24px;}

Step 2: replace right pattern
body {left: 24px;} p {left: 24px;}

糟糕!现在你已经剩下了。那不是很有帮助。您真正想要的是 preg_replace_callbackpreg_replace_callback 将为每个匹配运行用户定义的函数。所以我们要做的是一次找到所有的左和右,然后在我们的函数中我们交换左/右并返回它加上原始字符串,如下所示:

function replaceLeftRight($matches) {
// get the opposite left/right
$leftRight = ($matches[2] == 'left') ? 'right' : 'left';
return $matches[1] . $leftRight . $matches[3];
}

$pattern = '/([-{]\b)(left|right)(\b)/';
$subject = 'body {left: 24px;} p {right: 24px;}';
$subject = preg_replace_callback($pattern, 'replaceLeftRight', $subject);

// result: body {right: 24px;} p {left: 24px;}
echo $subject;

关于php - 正则表达式匹配并替换多个字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12563989/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com