2013-09-22 62 views
1

我一直在尋找如何選擇字符串中兩個字符之間的所有內容。選擇兩個字符之間的所有內容(不包括它們)

例字符串:

@ Some text here @ 

要選擇這個我做:

/@(.*)@/ 

但它包括@跡象

我試圖用我沒有成功網上找到不同的方法。

+2

你試圖得到什麼結果? – user113215

+2

請提供一些樣本數據和期望的輸出,否則這都是猜測工作。 – Lix

+0

@Lix是的我用HTML標籤沒有看到,改爲@標誌。我想刪除@標記 – Radicate

回答

5

這聽起來像你不熟悉捕獲組的概念。從「某些文字在這裏」,您可以使用類似/t(.+)t/之類的字詞在「文字」中間提取「ex」。雖然整場比賽將是「文字」,組#1將只是「前」。

通過將空變量/空數組作爲第三個參數傳遞給preg_match($pattern, $subject, $matches),您可以在PHP中使用捕獲組。

如果提供了$matches,則填充搜索結果。 $matches[0]將包含匹配完整模式的文本, $matches[1]將具有匹配第一個被捕獲的 括號內的子模式的文本,依此類推。

0

你在用什麼方法?我會用preg_match_all解釋兩個可能的正則表達式

$text = "hello @this is what i [email protected]!"; 

if (preg_match_all("/@([^@]*)@/", $text, $results)) 
    var_dump($results); 
    // [0][0] "@this is what i [email protected]" 
    // [1][0] "this is what i want" 

if (preg_match_all("/(?<[email protected])([^@]*)([email protected])/", $text, $results)) 
    var_dump($results); 
    // [0][0] "this is what i want" 
    // [1][0] "this is what i want" 

如果你有多次出現,您就可以通過第一深度循環。因此循環遍歷$results[1]將始終爲您提供正確的字符串(因爲字符串所在的括號是可搜索區域中的第一個字符串)。

至於表達式:

  1. 第一個是普通版本。您在指定的字符內查找指定文本(除@之外的所有內容)。但是因爲preg_match_all會給你所找到的整個字符串加上結果,所以你也得到了@。

  2. 第二個表達式使用所謂的lookaround。這意味着插入第一個和最後一個括號的字符不是搜索區域的一部分,而是之前/之後。

相關問題