php - preg_match 两边几个特殊字符之间的字符串

标签 php regex

我试图删除 MathJax 分隔符之间包含的所有文本,例如 $str1 = blah blah\( 2*(2+2) = 8\) blah blah\[\int_0^1 f = [F]_0^1\]

正如您可能已经想到的,分隔符是 \(...\)\[...\] 以及 ... 部分可以包含任何字符 ()[]\

仅考虑 \[...\] 情况,我已经尝试过

$text = preg_replace("/\\\[.*\\\]/","",$text);

但由于某种原因它与我的表达不匹配,而

$text = preg_replace("/.\[.*\\\]/","",$text);

确实与我的表达式匹配(但也有一些不需要的表达式,例如a[...\]

所以我的问题有两个:

  1. \\\[ 有什么问题吗?
  2. 我可以做一些比中间的 .* 更好的事情吗,它会说“可以有 \],但没有 \]

提前致谢!

最佳答案

  1. 你必须使用

    preg_replace("/\\\\\\[.*\\\\\\]/", "", $str1);

    preg_replace 的模式参数函数是一个普通的 PHP 字符串,因此 \\\ 取代产生以下正则表达式模式:

    /\\\[.*\\\]/

    前两个反斜杠\\匹配主题中的反斜杠,剩余\[\]匹配[] ,分别。

  2. 是的,您可以使用所谓的负向先行零宽度断言。看看http://www.regular-expressions.info/lookaround.html了解详情。对于你的情况,我会尝试类似的方法:

    preg_replace("/\\\\\\[(?:(?!\\\\\\]).)*\\\\\\]/","",$str1);

    ?!\\\\\\]一旦 \] 就停止比赛遇到。 ?:防止捕获外部一对括号。

关于php - preg_match 两边几个特殊字符之间的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15623679/

相关文章:

php - Laravel 正在返回键为 :value instead of array of objects 的对象

python - 正则表达式有额外的斜杠

python - 在 Python 中使用正则表达式确定字符串的不匹配部分

Javascript 正则表达式 : Match between ']' and ' - ' , 错误:量词无效

regex - 正则表达式用链接替换单词

java - 正则表达式查找2个字符之间的字符串,以逗号分隔

php - 在 Laravel 4 中如何查询 ManyToMany 关系?

PHP traits - 更改继承类中静态属性的值

PHP 在 preg_replace 上崩溃

php - 如何使用 JOIN 和 GROUP BY 从两个表中计数