正規表示式從匹配中排除括號之間的文本
php小編香蕉為您介紹一個強大且常用的字串處理工具-正規表示式。正規表示式在匹配字串時可以排除括號之間的文本,這在處理複雜的文本資料時非常實用。透過簡單的語法規則,我們可以輕鬆實現字串的篩選和提取,提高資料處理的效率和準確性。無論是在開發網頁、處理數據,或是進行文字分析等場景中,掌握正規表示式都是必備技能。讓我們一起來學習正規表示式,提升我們的字串處理能力吧!
問題內容
給定以下文字:
{field1} == value1 && {field2} == value2 && ({field3} == value3 && {field4} == value4) && {field5} == value5
我正在嘗試建立一個與該文字上的所有 &&
相符的正規表示式,但排除括號之間的內容(因此 value3 和 field4 之間的 && 應被忽略)。我已經能夠使用以下正規表示式來完成此操作: (\&{2})(?![^\(]*\))
[這個有效並且正在執行我需要的操作] 但問題是我正在使用golang,不支援負向前瞻。有什麼辦法可以做到沒有負面的前瞻?括號不能嵌套。
基本上我想按 &&
進行分割,但忽略括號之間的內容並得到類似的內容:
[&&, &&, &&] [{field1} == value1, {field2} == value2, ({field3} == value3 && {field4} == value4), {field5} == value5]
謝謝!
解決方法
您可以使用一種技術,透過該技術,匹配不需要的所有內容,但不捕獲它們,而匹配並捕獲所需的所有內容(即保存到捕獲組)。您可以使用以下正規表示式來做到這一點。
\([^\]]*\)|(&&)
內容為「匹配括號中的字串或 (|
) 匹配字串 」&&「
並將其儲存到捕獲組 1」。這個想法是(在程式碼中)忽略未捕獲的匹配。
對於以下字串,顯示匹配項(由 "m"
s 表示)和捕獲(由 "c"
s 表示)。
{f1} == v1 && {f2} == v2 && ({f3} == v3 && {f4} == v4) && {f5} == v5 mm mmmmmmmmmmmmmmmmmmmmmmmmmm mm cc cc
在字串({
)的開頭,\([^\]]*\)
和(&&)
都不匹配,因此字符串指標前進一位到f
。同樣,沒有匹配項,因此字串指標又前進一個字符,指向 1
。這將繼續(沒有匹配項),直到到達第一個 &
。 \([^\]]*\)
不匹配,但 (&&)
匹配。我們對該匹配感興趣,因為它已被捕獲(捕獲組 1)。
然後字串指標一次向前移動一個字符,不再找到任何匹配項,直到到達(
。此時,({f3} == v3 && {f4} == v4)
與\([^\]]*\)
匹配,但由於它沒有被捕獲,所以我們不關注它。這種情況一直持續到到達字串末尾。
或者,我們可以使用正規表示式
\([^\]]*\)|&&
並檢查每個匹配的第一個字元。如果是 (
我們放棄考慮匹配。
當找到&&
的每個匹配項時,我們可能(在程式碼中)將其替換為另一個(可能為空)字串,以取得其在字串中的偏移量(出於某種目的)或簡單地增加字串中匹配數的計數器。這當然取決於我們為什麼要匹配這些字串。
以上是正規表示式從匹配中排除括號之間的文本的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)