我一直在尋找如何選擇字符串中兩個字符之間的所有內容。選擇兩個字符之間的所有內容(不包括它們)
例字符串:
@ Some text here @
要選擇這個我做:
/@(.*)@/
但它包括@
跡象
我試圖用我沒有成功網上找到不同的方法。
我一直在尋找如何選擇字符串中兩個字符之間的所有內容。選擇兩個字符之間的所有內容(不包括它們)
例字符串:
@ Some text here @
要選擇這個我做:
/@(.*)@/
但它包括@
跡象
我試圖用我沒有成功網上找到不同的方法。
這聽起來像你不熟悉捕獲組的概念。從「某些文字在這裏」,您可以使用類似/t(.+)t/
之類的字詞在「文字」中間提取「ex」。雖然整場比賽將是「文字」,組#1將只是「前」。
通過將空變量/空數組作爲第三個參數傳遞給preg_match($pattern, $subject, $matches)
,您可以在PHP中使用捕獲組。
如果提供了
$matches
,則填充搜索結果。$matches[0]
將包含匹配完整模式的文本,$matches[1]
將具有匹配第一個被捕獲的 括號內的子模式的文本,依此類推。
你在用什麼方法?我會用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]
將始終爲您提供正確的字符串(因爲字符串所在的括號是可搜索區域中的第一個字符串)。
至於表達式:
第一個是普通版本。您在指定的字符內查找指定文本(除@之外的所有內容)。但是因爲preg_match_all
會給你所找到的整個字符串加上結果,所以你也得到了@。
第二個表達式使用所謂的lookaround。這意味着插入第一個和最後一個括號的字符不是搜索區域的一部分,而是之前/之後。
你試圖得到什麼結果? – user113215
請提供一些樣本數據和期望的輸出,否則這都是猜測工作。 – Lix
@Lix是的我用HTML標籤沒有看到,改爲@標誌。我想刪除@標記 – Radicate