php正则表达式用括号括起字符串,除非已被非文字括号括起

php正则表达式用括号括起字符串,除非已被非文字括号括起,php,regex,Php,Regex,我有一些代码通过组合水平空白并用括号括起来来扩充正则表达式,除非它已经被非反斜杠括号括起来了。我有一段代码正在运行: $regex_find = preg_replace('/(?<!\()[ \t]{2,}(?!\))/', '([ \t]{2,})', $regex_find); $regex\u find=preg\u replace('/(?您的原始regex也有另一个问题。请尝试在此服务器上运行它: $str = "asdf( )sdf sdf"; //re

我有一些代码通过组合水平空白并用括号括起来来扩充正则表达式,除非它已经被非反斜杠括号括起来了。我有一段代码正在运行:

$regex_find = preg_replace('/(?<!\()[ \t]{2,}(?!\))/', '([ \t]{2,})', $regex_find);

$regex\u find=preg\u replace('/(?您的原始regex也有另一个问题。请尝试在此服务器上运行它:

 $str = "asdf(     )sdf     sdf";
 //results in: "asdf( (   ) )sdf(     )sdf"
这个正则表达式应该可以:

$regex_find = '(    asdf(     )sdf     sdf';
preg_replace('/(?<!(\(|\s)(?=\s*\)))\s{2,}/','($0)',$regex_find);
//result = "((    )asdf(     )sdf(     )sdf"

您的原始正则表达式还有另一个问题。请尝试在以下位置运行它:

 $str = "asdf(     )sdf     sdf";
 //results in: "asdf( (   ) )sdf(     )sdf"
这个正则表达式应该可以:

$regex_find = '(    asdf(     )sdf     sdf';
preg_replace('/(?<!(\(|\s)(?=\s*\)))\s{2,}/','($0)',$regex_find);
//result = "((    )asdf(     )sdf(     )sdf"

根据巴特的评论,我们有:
$s='(\()bcd';$s=preg\u replace('/([^\t(])([\t]{2,})([^\t)])/',“$1([\t]{2,})$3',$s);
首先,replace不允许
\(
在核心字符串之前。是的,这个左括号只能是一个反斜杠。此外,右括号需要绑定到左括号中。上述测试字符串的正确解决方案是:
(\([\t]{2,}))bc([\t]{2,})实际上,在左内括号之前的任何奇数个反斜杠都会创建一个文字括号。根据巴特的评论调整,我们有:
$s='(\()bcd';$s=preg\u replace('/([^\t(])([\t]{2,})([^\t)]/,“$1([\t]{2,})$3',$s);
首先,replace不允许使用
\(
在核心字符串之前。是的,这个左括号只能是一个反斜杠。此外,右括号需要绑定到左括号中。上述测试字符串的正确解决方案是:
(\([\t]{2,}))bc([\t]{2,})d
。实际上,左内括号前面的任何奇数个反斜杠都会创建一个文字括号。太好了!但它没有正确检查转义,可以使用另一个查找,如
/(?:vs Get“Warning:preg_replace()[function.preg replace]:编译失败:丢失)偏移量33处在PHP4.4.9中。也许这比它的价值要麻烦得多。嵌套括号不是最糟糕的东西太棒了!但是它没有正确地检查转义,可以使用另一个查找,比如偏移量33处的
/(?:vs Get“Warning:preg_replace()[function.preg replace]:编译失败:丢失…”在PHP4.4.9中。也许这比它的价值更麻烦。嵌套括号不是最糟糕的事情