簡體   English   中英

正則表達式 - 括號內的所有內容

[英]Regex - everything but anything within parenthesis

有,讓我們說:

fieldA=20 and (fieldB=date() and (fieldC=35 and fieldD=40)) and fieldE = 100

我正在嘗試更換“和”字樣的東西:

fieldA=20 zzz (fieldB=date() and (fieldC=35 and fieldD=40)) zzz fieldE = 100

我已經試了幾個小時,沒有成功。 我可以找到一些關於如何將所有內容括括號或括號內的答案。 下面的表達式將所有內容都放在括號內,但我實際上並不知道如何編寫一個忽略它的表達式:

\(([^()]*+|(?R))*\)    # retrieves "(fieldB=date() and (fieldC=35 and fieldD=40))"

任何幫助,將不勝感激。

試試這種模式:

/^(.*?)(?:and)(.*)(?:and)(.*)$/

並替換為:

$1 zzz $2 zzz $3

在線演示

你的\\(([^()]*+|(?R))*\\)模式包含一個完整的模式遞歸結構(?R)允許匹配嵌套括號及其中的所有內容。 你需要的是省略與這個子模式匹配的所有內容並匹配, and除此之外的整個單詞。 我們需要將整個子模式放入捕獲組並用(?1)替換(?R) (?1)以僅遞歸第一個捕獲組模式,而不是整個模式。

(*SKIP)(?!)構造可用於省略PCRE正則表達式中當前匹配的替代方案。

因此,使用

(\(([^()]*+|(?1))*\))(*SKIP)(?!)|\band\b

請參閱正則表達式演示

簡而言之,

  • (\\(([^()]*+|(?1))*\\))(*SKIP)(?!) - 將嵌套括號與內部所有內容相匹配,省略此匹配文本並繼續分析字符串
  • | - 要么...
  • \\band\\b - 匹配並返回整個單詞and

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM