我试图摆脱包含在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字符串,因此''
被'
替换以产生以下regex模式:/'''[.*''']/
前两个反斜杠
''
匹配主题中的反斜杠,其余的'[
和']
分别匹配[
和]
。 -
是的,你可以,使用所谓的负向前看零宽度断言。详情请浏览http://www.regular-expressions.info/lookaround.html。在您的情况下,我会尝试这样做:
preg_replace("/''''''[(?:(?!'''''']).)*'''''']/","",$str1);
一旦遇到
']
,?!'''''']
就会停止匹配。?:
防止外部括号对被捕获
下面是一个正则表达式,它将匹配任意一个分隔符:
preg_replace('/''['['(].*?''[']')]/', '', $data);