我试图摆脱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[...\]
。
所以我的问题是双重的:
\\\[
出了什么问题?\
或]
,但没有\]
?提前致谢!
答案 0 :(得分:3)
你必须使用
preg_replace("/\\\\\\[.*\\\\\\]/", "", $str1);
preg_replace
函数的模式参数是一个普通的PHP字符串,因此\\
被\
替换为导致以下正则表达式模式:
/\\\[.*\\\]/
前两个反斜杠\\
匹配主题中的反斜杠,剩余的\[
和\]
匹配[
和]
。
是的,您可以使用所谓的负前瞻零宽度断言。有关详细信息,请查看http://www.regular-expressions.info/lookaround.html。在你的情况下,我会尝试类似的东西:
preg_replace("/\\\\\\[(?:(?!\\\\\\]).)*\\\\\\]/","",$str1);
?!\\\\\\]
遇到\]
后立即停止匹配。 ?:
阻止外部括号对被捕获。
答案 1 :(得分:1)
这是一个正则表达式,它将匹配任一分隔符:
preg_replace('/\\[\[\(].*?\\[\]\)]/', '', $data);