2011-01-11 4 views
1

グループと一致するはずの正規表現パターンを検索します。正規表現パターンに続き
はbasicly作品:Regexでのアンチマッチ

index\.php\?page=(?:.*)&tagID=([0-9]+)$ 

しかし.*TaggedObjectsと一致してはいけません。

アドバイスありがとうございます。

+0

TaggedObjects?それは一致してはならない文字列ですか? – Jaskirat

+0

誰かが先読みしていますか? – delnan

答えて

4

(?:.*)は不要です。何もグループ化していないので、.*はまったく同じ意味です。しかし、それはあなたの質問に対する答えではありません。 別の定義済みの文字列(TaggedObjects言う)、あなたの例では

(?:(?!TaggedObjects).)* 

を使用するが含まれていない、

index\.php\?page=(?:(?!TaggedObjects).)*&tagID=([0-9]+)$ 

index.php?page=blahblah&tagID=1234 

にマッチする任意の文字列にマッチさせるために

一致しません

index.php?page=blahTaggedObjectsblah&tagID=1234 

あなたは

index\.php\?page=(?!TaggedObjects&tagID=([0-9]+)$).*&tagID=([0-9]+)$ 
+1

あなたの最初のポイントに応じて '(?!TaggedObjects)。*'になることがあります。 – SilentGhost

+0

@SilentGhost:いいえ、繰り返しはグループの外にあります(後に続くすべての位置で否定的な先読みを適用するため)。 '(?:(?! TaggedObjects)。*)'の代わりに '(?!。* TaggedObjects)。*'があります。しかし、。 –

+0

私は否定的な先読み(?!)をパッシブグループ(?:)の中に置くことはしません。なぜなら、否定的な先取りはとにかく捕らえられないからです。なぜあなたは1つの "。"受動的なグループの内部?何故なの 。*? – Jaskirat

1

を使用し、その後、その試合を許可するだけ正確な文字列TaggedObjectsを除外したいならば、これを試してみてください。文字列に 'TaggedObjects'の出現が含まれていると一致すると失敗したとします。

index\.php\?page=(?!.*TaggedObjects).*&tagID=([0-9]+)$