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中文網其他相關文章!