簡體   English   中英

連接兩個捕獲組

[英]Concatenating two capture groups

我有一個可以分成 3 部分的字符串(Keep1 | Ignore | Keep2)。 目標是刪除中間的子字符串並連接其他兩個子字符串。 為了實現這一點,我創建了兩個正則表達式,一個為 Keep1 創建一個捕獲組,另一個為 Keep2 創建一個捕獲組。

示例文本:

First String.<ref> IGNORE </ref> Second String.

第一個正則表達式:

.*(?=<ref>)    

輸出:

First String.

第二個正則表達式:

(?<=&lt;\/ref&gt;).*   

輸出:

Second String.   

期望輸出:

First String. Second String.

到目前為止,我一直無法找到連接兩個字符串的方法,這在 flex 上可行嗎?

(F)lex 不實現捕獲組,也不實現前瞻斷言。 一般而言,它只實現滿足“正則表達式”數學定義的構造,因此 abd 可以用在線性時間和恆定空間中工作的簡單有限狀態機來實現。

其正則表達式語法的(簡短而完整的)文檔可在Flex 手冊 中找到。

(“flex”中的“f”代表“fast”,但最初的“lex”也很活潑,主要是因為這個設計決定。)

您有兩種選擇,具體取決於您的代幣的確切性質:

  1. 如果您確實可以從第一部分識別出令牌,那么您可以使用開始條件來識別令牌的其余部分

  2. 否則,您可以在一個正則表達式中識別整個令牌,然后重新掃描它以找出您想要保留的部分。 您可能會也可能不會使用 flex 進行第二次掃描; 同樣,您可以使用開始條件為重新掃描應用不同的規則,但這將取決於您的模式的確切性質。 您還可以使用正則表達式庫(Posix 標准庫或一些更靈活的庫(例如 PCRE))重新掃描。

請注意,(f)lex 也沒有實現非貪婪重復,因此如果要實現“以 X 開頭並以 Y 結尾的最短字符串”,則需要使用類似於(最后一個)示例中所示的技術在有關啟動條件的 Flex 手冊章節中

暫無
暫無

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

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