2013-03-25 124 views
2

我試圖擺脫MathJax分隔符之間包含的所有文本,例如$str1 = blah blah \(2*(2+2) = 8\) blah blah \[ \int_0^1 f = [F]_0^1 \]preg_match每一邊幾個特殊字符之間的字符串

正如你可能已經想通,分隔符是\(...\)\[...\]...部分可以包含任意字符​​的。

只考慮\[...\]情況下,我已經試過這

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

,但它不符合我的表情出於某種原因,而

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

不符合我的表達式(但也有一些如a[...\]

所以我的問題是雙重的:

  1. \\\[怎麼了?
  2. 我能做些什麼好過的。*在中間的那個會說:「這是確定有一個\],但沒有\]

提前感謝!

+0

是否要刪除'\ [\]'之間的所有內容? – HamZa 2013-03-25 20:27:57

+0

@HamZaDzCyber​​DeV是的,還有'\ [\]'。 – arnaudrg 2013-03-25 20:40:56

回答

3
  1. 你必須使用

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

    圖案參數到preg_replace函數是一個普通的PHP字符串,因此\\得到由\替換爲導致以下正則表達式模式:

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

    前兩個反斜槓\\匹配主題中的反斜槓,其餘\[\]分別匹配[]

  2. 是的,您可以使用所謂的負向預測零寬度斷言。有關詳細信息,請參閱http://www.regular-expressions.info/lookaround.html。在你的情況,我想嘗試這樣的:

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

    ?!\\\\\\]只要遇到\]停止比賽。 ?:可防止外部的括號對被捕獲。

+0

完美的作品,謝謝! – arnaudrg 2013-03-25 20:44:16

+0

我的榮幸,很樂意提供幫助。 – Marcellus 2013-03-25 20:51:21

1

這是一個普通的表達式會匹配分隔符之一:

preg_replace('/\\[\[\(].*?\\[\]\)]/', '', $data); 
+0

感謝您的建議,但它沒有與我嘗試的一堆表達式一起工作... – arnaudrg 2013-03-25 20:42:28

+0

對不起,我正在使用一個在線的PHP正則表達式編輯器...似乎被打破:( – ramblex 2013-03-25 20:45:28

相關問題