我正在使用一個採用PCRE兼容正則表達式的系統。從捕獲組中排除子串
系統將捕獲組1存儲到數據庫中。
我需要用分隔符(不包括分隔符)將字符串的兩半作爲單個捕獲組捕獲。
鑑於字符串:「我想捕捉此位,但不是這一點,肯定此位」
,我感到我可以創建這樣一個正則表達式:
([A-Za-z/s]*) but not this bit([A-Za-z/s]*)
這給我兩捕獲組: 組1:「我想捕獲這個位」 組2:「絕對是這個位」
但是,我錯過了我的一半結果,因爲組1是所有存儲的。
我正在使用一個採用PCRE兼容正則表達式的系統。從捕獲組中排除子串
系統將捕獲組1存儲到數據庫中。
我需要用分隔符(不包括分隔符)將字符串的兩半作爲單個捕獲組捕獲。
鑑於字符串:「我想捕捉此位,但不是這一點,肯定此位」
,我感到我可以創建這樣一個正則表達式:
([A-Za-z/s]*) but not this bit([A-Za-z/s]*)
這給我兩捕獲組: 組1:「我想捕獲這個位」 組2:「絕對是這個位」
但是,我錯過了我的一半結果,因爲組1是所有存儲的。
您可能正在考慮分支重置功能。但這只是一個假設。
(?|([a-zA-Z\s]+) but not this bit|([a-zA-Z\s]+))
如評論中所述,您可以使用正確的語法修復此問題。
([A-Za-z\s]+) but not this bit([A-Za-z\s]+)
是的,分支重置組很好,但它不是這項工作的工具。問題是第二組總是捕獲一個空字符串,並且通過將'/ s'更改爲'\ s'來解決這個問題。將'*'改成'+'也很好,如果你可以用'+'代替,你不應該使用'*'。它只會讓你面對糟糕的表現和沉默的失敗。 – 2014-08-28 18:07:08
爲什麼不試試這個http://regex101.com/r/lD8nJ2/2? – 2014-08-28 14:26:19
你錯過了'g'修飾符,它告訴正則表達式在第一次匹配後繼續,所以通常是'/([A-Za-z/s] *)而不是這個位([A-Za-z/s] *)/ g',這取決於你的PCRE系統的語法可能不同 – Tensibai 2014-08-28 14:31:04
一種方法是首先檢查輸入是否包含'但不是這個位'。如果確實如此,則從輸入中刪除「但不是這個位」,並捕獲捕獲的組1的其餘部分。 – anubhava 2014-08-28 14:37:34