Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP正则表达式:未包装的项_Php_Regex - Fatal编程技术网

PHP正则表达式:未包装的项

PHP正则表达式:未包装的项,php,regex,Php,Regex,如何通过PHP正则表达式查找和替换字符串中所有未包装的项 例如,我有源字符串2a{2}b2ac1{1}a{2}aab12{1}b2a{1}2,并尝试查找{和}未包含的符号2,在此之后将其替换为{3}: $input_lines = "2a{2}b2ac1{1}a{2}aab12{1}b2a{1}2"; $regex = "/[^\{](2)[^\}]/"; $input_lines = preg_replace("/[^\{](2)[^\}]/", "{3}", $input_lines); e

如何通过PHP正则表达式查找和替换字符串中所有未包装的项

例如,我有源字符串2a{2}b2ac1{1}a{2}aab12{1}b2a{1}2,并尝试查找{和}未包含的符号2,在此之后将其替换为{3}:

$input_lines = "2a{2}b2ac1{1}a{2}aab12{1}b2a{1}2";
$regex = "/[^\{](2)[^\}]/";
$input_lines = preg_replace("/[^\{](2)[^\}]/", "{3}", $input_lines);
echo $input_lines;
// 2a{2}{3}c1{1}a{2}aab{3}1}{3}{1{3}
您可以看到,它现在起作用了:

您可以试试这个:

$input_lines = preg_replace('/(?<!{)2(?!})/', '{3}', $input_lines);
你可以试试这个:

$input_lines = preg_replace('/(?<!{)2(?!})/', '{3}', $input_lines);
我会成功的。更新以处理类似123}的场景

说明:

我会成功的。更新以处理类似123}的场景

说明:


澄清一下:你想让123转向1{3}2,但1{2}3不应该发生任何事情。对吗?@SamSullivan,123转向1{3}3,1{2}3不会发生任何事情。只需将所有2替换为{3},但不要替换{2}。澄清一下:您希望123变为1{3}2,但1{2}3不应发生任何事情。对吗?@SamSullivan,123变为1{3}3,1{2}3不会发生任何事情。只需将所有2替换为{3},但不替换{2}。没问题,请选择是否有效。还可以查看有关的一些信息。如果你需要解释我的正则表达式,我可以提供。这个逻辑是错误的。它匹配后面没有{2}的2。他要求的是不是{2}的2,这是不同的。是的,我会检查你的答案是否正确。但我只能在几分钟后才能完成StackOverflow站点系统锁定…修复了@EdCottrell。谢谢你提醒我。@Sam Sullivan你的第一个答案是错误的…然后你复制/粘贴了我的…不好…:P无论如何,这只是为了好玩,所以没关系:没问题,请选择是否它是有效的。也检查一些关于的信息。如果你需要我的正则表达式的解释,我可以提供。这个逻辑是错误的。它匹配2,后面没有{。他要求的2不是{2},这是不同的。是的,我会检查你的答案是否正确。但我只能在几分钟后才能完成StackOverflow站点系统锁定…修复@EdCottrell。谢谢你提醒。@Sam Sullivan你的第一个答案是错误的…然后你复制/粘贴我的…不好…:P无论如何,这只是为了好玩,所以没关系:
/                                 # Beginning delimiter
 (?<!{)                           # Lookbehind for anything other than {
  2                               # Match 2
 (?!})                            # Lookahead for anything other than }
/                                 # Ending delimiter