什麼樣的正則表達式模式可以用於使用圓括號對中的以下點查找單詞。匹配包裹的圖案
as。 df.kj hlasfa(asd。 las kdfh。)dfs adk jfh。一個(sd.kf)JHD(DSK FH。)dskfdf ASDF DFS lkjh asdfdsfjkhlkjh(ASDF。)作爲fadf ASF
期望的結果以粗體顯示。
什麼樣的正則表達式模式可以用於使用圓括號對中的以下點查找單詞。匹配包裹的圖案
as。 df.kj hlasfa(asd。 las kdfh。)dfs adk jfh。一個(sd.kf)JHD(DSK FH。)dskfdf ASDF DFS lkjh asdfdsfjkhlkjh(ASDF。)作爲fadf ASF
期望的結果以粗體顯示。
一個多的選擇是:
\b[a-zA-Z]+[.](?=[)])(?=[^(]*[)])
@Reza - 沒有向後看。第一個肯定的前瞻'(?= [)])'確保在期間後面有一個空格或者結束圓括號。第二個肯定性前瞻'(?= [^(] * [)])'確保在後面的圓括號之後出現圓形括號,並且在該期間和該圓形括號之間沒有開頭的圓括號。 –
你可以使用一個lookahead,斷言有下一個關閉一個之前沒有開括號:
preg_match_all('/[a-zA-Z]+\.(?![a-zA-Z])(?=[^()]*\))/', $input, $matches);
你會發現在四場比賽中$matches
。
第一個負面預測消除了HamZa在評論中提到的情況。第二個(肯定的)lookahead試圖在下一個開場之前找到右括號。
這裏有一個警告。一旦你嵌套括號,這將開始崩潰。 some(text. (here))
將不匹配text.
。嵌套模式(使用括號可能會出現)通常超出正則表達式的範圍,儘管某些引擎可以部分處理它們。如果這是你的情況,你最好手動瀏覽字符串並計算括號。
應(sd.kf)也被加粗? – HamZa
@HamZaDzCyberDeV不應該 – PHPst
你嘗試過那種方法不起作用? – rdlowrey