Php 如何使用带有单个preg_替换的正则表达式从字符串中删除许多不同的括号[](){}和内容?

Php 如何使用带有单个preg_替换的正则表达式从字符串中删除许多不同的括号[](){}和内容?,php,regex,preg-replace,Php,Regex,Preg Replace,目前我正在使用 $str = preg_replace("/\([^\)]+\)/", "", $str); // Remove () and Content $str = preg_replace("/\[[^\)]+\]/", "", $str); // Remove [] and Content $str = preg_replace("/\{[^\)]+\}/", "", $str); // Remove {} and Content $str = preg_replace("/[^a-

目前我正在使用

$str = preg_replace("/\([^\)]+\)/", "", $str); // Remove () and Content
$str = preg_replace("/\[[^\)]+\]/", "", $str); // Remove [] and Content
$str = preg_replace("/\{[^\)]+\}/", "", $str); // Remove {} and Content
$str = preg_replace("/[^a-zA-Z0-9]/", "", $str);  // Remove all non-alphanumeric characters

我想知道是否有一种方法可以将这些语句组合成一个regex语句

您可以使用
来组合这些语句:

(\([^\)]+\)|\[[^\]]+\]|\{[^\}]+\})|[^A-Za-z0-9])

但在您的情况下,我通常只需要遍历字符串并手动解析它。
使用“状态变量”(
$paren\u open
$brace\u open
$curly\u open
)了解是否忽略字符

即使它看起来不快(因为你必须遍历每个字符),它也比正则表达式快得多,因为正则表达式会做一些更复杂的事情


资源:


您可以使用
|
来组合以下各项:

(\([^\)]+\)|\[[^\]]+\]|\{[^\}]+\})|[^A-Za-z0-9])

但在您的情况下,我通常只需要遍历字符串并手动解析它。
使用“状态变量”(
$paren\u open
$brace\u open
$curly\u open
)了解是否忽略字符

即使它看起来不快(因为你必须遍历每个字符),它也比正则表达式快得多,因为正则表达式会做一些更复杂的事情


资源:


我不知道它是否更快,但我确信状态机更容易编码,也更可靠。它会更快,原因很简单,这里我们只检查字符串一次,基本上什么都不做。正则表达式也必须遍历字符串,但它还有“表达式部分”要做,这比检查3个变量要复杂得多。
\W
[^A-zA-Z0-9]
不同,因为
\W
包括
\ucode>@cbuckley,事实上,但我太懒了,没有复制整个
[^A-zA-Z0-9]
已无法读取的正则表达式中的部分。(修复;P)无论如何,不应该使用这个正则表达式,另一个解决方案的性能要高得多;这个解决方案对我很有效,谢谢Colin:)我还将查找“状态变量”,其描述似乎没有多大意义,但我确信如果我查找它,我将能够在将来使用它。谢谢,我不知道它是否更快,但我确信状态机更容易编码,更可靠。它会更快,原因很简单,这里我们只检查字符串一次,基本上什么都不做。正则表达式也必须遍历字符串,但它还有“表达式部分”要做,这比检查3个变量要复杂得多。
\W
[^A-zA-Z0-9]
不同,因为
\W
包括
\ucode>@cbuckley,事实上,但我太懒了,没有复制整个
[^A-zA-Z0-9]
已无法读取的正则表达式中的部分。(修复;P)无论如何,不应该使用这个正则表达式,另一个解决方案的性能要高得多;这个解决方案对我很有效,谢谢Colin:)我还将查找“状态变量”,其描述似乎没有多大意义,但我确信如果我查找它,我将能够在将来使用它。谢谢即使不合并成一个正则表达式,preg_replace也可以将数组作为其前两个参数。即使不合并成一个正则表达式,preg_replace也可以将数组作为其前两个参数。