PHP正则表达式:未包装的项
如何通过PHP正则表达式查找和替换字符串中所有未包装的项 例如,我有源字符串2a{2}b2ac1{1}a{2}aab12{1}b2a{1}2,并尝试查找{和}未包含的符号2,在此之后将其替换为{3}: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
$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