2017-04-21 81 views
1

我正在尋找一個匹配某些內容(包含重複項)的正則表達式,但只有當前面沒有等號字符(=)時纔有匹配,並且只有當它沒有遵循以&符號字符(&)。正則表達式與數字不匹配(如果被特定模式包圍)

因此,舉個例子,假設要匹配的內容由CONTENT表示。我認爲這不是什麼問題,只是被匹配的內容很長,所以我不能在我使用的應用程序中複製所有內容。 CONTENT可以出現在blob中的任何地方,也可能是唯一的東西。

CONTENT   // OK, should match 
fooCONTENT  // OK, should match 
CONTENTfoo  // OK, should match 
fooCONTENTfoo // OK, should match 
=CONTENT  // OK, should match 
CONTENT&  // OK, should match 
=CONTENT&  // NO - SHOULD NOT MATCH 

我想是這樣的模式:

(?!=CONTENT&)CONTENT... 

但它不工作,排除=CONTENT&,可能是因爲正則表達式引擎僅僅是將過去的主導=,然後先行滿足。

我認爲在CONTENT之後做了一個負反序,但由於CONTENT包含重複,所以不可能(看後面必須有固定長度模式)。

+0

你試圖匹配一個單獨的字符串,或可以此內容在任何地方出現在文本,例如? –

+1

'^ [^ =]。* [^&] $'會匹配你想要的模式。 –

+0

當你說* CONTENT重複自己*時,這意味着什麼? – revo

回答

0

據我瞭解你正在試圖通過&不能同時在同一時間,以配合Content要麼=之前或之後。

您可以通過使用更改如下來實現它。

正則表達式:^=?[^=&]+$|^[^=&]+&?$

說明:

^=?[^=&]+$尋找一個可選=其次是比=&等多個字符。

^[^=&]+&?$尋找除=&以及&之外的多於一個字符。

|是改變哪些力量與任何聲明的模式相匹配。

Regex101 Demo

+0

謝謝。這是一個有趣的方法。我會嘗試一下,但就我而言,我在比賽的「主要」部分之前和之後都看了一遍。而且比賽的主要部分包含了裏面的lookaround,所以它不能被放入一個字符集。像這樣的變化可以用於不能放入字符集的模式嗎? – codesniffer

+0

@codesniffer:你可以在你的問題中解釋一下嗎?我沒有跟着你。 – Rahul

+0

想象一下我的號碼模式是這樣的:'(?!123 | 222 | 999)\ d {3}(?:[] + | [-_]?[] +)\ d {5,7} (?![\ d - ])'(實際比這更復雜)。考慮到它不能放置在字符集內,可以將這樣的模式與您的建議一起使用嗎? – codesniffer

相關問題