如何通过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}
你怎么看,它现在起作用了:(
答案 0 :(得分:5)
你可以试试这个:
$input_lines = preg_replace('/(?<!{)2(?!})/', '{3}', $input_lines);
答案 1 :(得分:2)
/(?<!{)2(?!})/
会做到这一点。已更新,以处理123}
等方案。
$input_lines = '2a{2}b2ac1{1}a{2}aab12{1}b2a{1}2';
$input_lines = preg_replace('/(?<!{)2(?!})/', '{3}', $input_lines);
var_dump($input_lines);
// string(42) "{3}a{2}b{3}ac1{1}a{2}aab1{3}{1}b{3}a{1}{3}"
<强>解释强>
/ # Beginning delimiter
(?<!{) # Lookbehind for anything other than {
2 # Match 2
(?!}) # Lookahead for anything other than }
/ # Ending delimiter