正則表達式我有一個包含字符串本(其中數字是表示用戶ID的整數)捕獲兩個從字符串
@[calbert](3)
@[username](684684)
我想我需要以下來獲取用戶名和用戶ID
\((.*?)\)
和
\[(.*?)])
但是,有沒有辦法一下子得到兩者兼而有之?
和PHP返回,是有可能只能得到結果,而不括號(和用戶名的情況下支架)
Array
(
[0] => (3)
[1] => 3
)
正則表達式我有一個包含字符串本(其中數字是表示用戶ID的整數)捕獲兩個從字符串
@[calbert](3)
@[username](684684)
我想我需要以下來獲取用戶名和用戶ID
\((.*?)\)
和
\[(.*?)])
但是,有沒有辦法一下子得到兩者兼而有之?
和PHP返回,是有可能只能得到結果,而不括號(和用戶名的情況下支架)
Array
(
[0] => (3)
[1] => 3
)
通過積極lookbehead和前瞻斷言。
(?<=\[)[^\]]*(?=])|(?<=\()\d+(?=\))
(?<=\[)
斷言這場比賽必須由[
字符preceeded,
[^\]]*
任何字符匹配,但不是]
零次或多次。
(?=])
聲明匹配必須後跟]
符號。
|
被調用的邏輯OR運算符用於組合兩個正則表達式。
如何只獲取數字,因爲字符串是@ [leesfer](3)(不是),「不是」是匹配嗎? – Callombert
使用'\ d +'。看到更新。 –
\[([^\]]*)\]|\(([^)]*)\)
嘗試this.See demo.You需要使用|
或操作員這提供了正則表達式引擎來提供交替的捕獲組,如果第一個失敗。
https://regex101.com/r/tX2bH4/31
$re = "/\\[([^\\]]*)\\]|\\(([^)]*)\\)/im";
$str = " @[calbert](3)\n @[username](684684)";
preg_match_all($re, $str, $matches);
或者您可以使用自己的烏爾正則表達式。 \((.*?)\)|\[(.*?)\])
檢查PHP函數['preg_match_all()'](http://php.net/manual/en/function.preg-match-all.php)和['正則表達式'語法](http://php.net/manual/en/reference.pcre.pattern.syntax.php)。 – axiac