我试图删除 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[...\]
。
所以我的问题有两个:
\\\[
有什么问题吗?- 我可以做一些比中间的 .* 更好的事情吗,它会说“可以有
\
或]
,但没有\]
?
提前致谢!
最佳答案
你必须使用
preg_replace("/\\\\\\[.*\\\\\\]/", "", $str1);
preg_replace
的模式参数函数是一个普通的 PHP 字符串,因此\\
被\
取代产生以下正则表达式模式:/\\\[.*\\\]/
前两个反斜杠
\\
匹配主题中的反斜杠,剩余\[
和\]
匹配[
和]
,分别。是的,您可以使用所谓的负向先行零宽度断言。看看http://www.regular-expressions.info/lookaround.html了解详情。对于你的情况,我会尝试类似的方法:
preg_replace("/\\\\\\[(?:(?!\\\\\\]).)*\\\\\\]/","",$str1);
?!\\\\\\]
一旦\]
就停止比赛遇到。?:
防止捕获外部一对括号。
关于php - preg_match 两边几个特殊字符之间的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15623679/