的或者是或不管什麼,不能圍繞該得到的。
正如@Tim所提到的,它可以通過以下方式完成:
您可以靜止不動,並多次查看同一文本。
所以,一種方法是查看每個表達式而不移動,每個表達式都是可選的。 -
(?= (ee [0-9]{9} in)?)
(?= (ee [0-9]{9} [a-zA-Z]{3})?)
這是不好的,因爲,雖然位置將在最後一個
表達後前進,它只會提前1字符間的位置。當在全局上下文中搜索時,它也允許重疊。在塊(還不知道它如何決定)
(?= (ee [0-9]{9} in)?)
(?= (ee [0-9]{9} [a-zA-Z]{3})?)
.
發動機未優化的東西時被消耗,
進步 -
搜索可以通過消耗字符加快。
如果您還有其他表達方式,則需要將
的位置提前超過此位置,否則任何情況都不會匹配。這也可以消除
重疊匹配的文字(如果這是一個目標)。
它實際上很難避免重疊,除非你確實知道一個表達式將會比另一個表達式要長
。如果那是實際情況,那麼你總是可以做一個有條件
(如果可用)要消耗較大的文本 -
(?= (ee [0-9]{9} in)?)
(?= (ee [0-9]{9} [a-zA-Z]{3})?)
(?(2) \2 | \1)
而且,如果你知道一個是另一個的子集,你可能只是這樣做 -
(?= (ee [0-9]{9} in)?) (ee [0-9]{9} [a-zA-Z]{3})
無論哪種方式,取決於表達式,想那麼多有進入設計
消費進入正則表達式,以避免重疊。
來源
2012-04-13 19:45:45
sln
這個例子沒有多大意義。 *您*已經構建了正則表達式。所以你知道*每次*第一個替代匹配,第二個也會匹配,因爲第一個正則表達式是第二個正則表達式的「子集」。爲什麼你會需要這個?你能想到一個更現實的例子,顯示你想要解決的實際問題嗎? – 2012-04-13 16:59:56