2013-07-05 13 views
5

<または>または<=または>=または=のいずれかの文字と一致します。より大きい正規表現

この1つは動作していないよう:[/</=/>]

答えて

3

あなたは文字クラスの中でこれらの文字のいずれかをエスケープする必要はありません。それとは別に、それらの文字の1回以上の反復にマッチさせるために、数量詞を使用する必要があります。あなたはこの必要

<=>=のために必要とされる

[<>=]{1,2} 

は、2回の繰り返しに一致するように、数量詞に注意してください。 ==<<を -


はまた、これも一致することに注意してください。 =が、それは、オプションの落札後?を使用して

[<>]=?|= 

:あなたは厳密にちょうどそれらの4つの文字列を一致させたい場合は、この正規表現を使用することができます。つまり、最初の部分は<,>,<=、および>=と一致します。そして、パイプを使って=を追加します。

+1

これは '=='、 '' '、' = <'などとも一致します。 – Barmar

+0

@Barmar。ええ、もちろん。しかし、私は厳しく取っていない。私は答えを更新するかもしれない。 –

+0

ありがとうございますが、< or >だけでは動作しませんが、<= or > =または= – saroll

2

なぜスラッシュを使用しているのかわかりません(私が気づいていないcoldfusionで何かがあるかもしれませんが、必要に応じてそれらを追加してください)...あなたの正規表現は現在、1つの文字にしかマッチしません。試してみてください:あなたは1つの正規表現のみ><>=<==を一致させたい場合は

[<=>]{1,2} 

、それにもう少しがあるでしょう。 ColdFusionのREMatch()関数は配列内で一致するすべての結果を返しますので、Pythonではfindall、PHPではpreg_match_allのように区切り文字や境界を指定することが重要です(またはグローバルマッチにフラグを立てる) 。

私が最も簡単だと思うの境界が\bです:

\b(?:[<>]=?|=)\b 

Here's a demo with g activated

これらの境界がなく、here's what happensです。

編集:スペースについて何か気付かなかった。おそらくこれで修正できますか?

\b\s*(?:[<>]=?|=)\s*\b 
+0

ありがとうございます。これは、=または<= or > =でのみ動作しますが、>または saroll

+0

@sarollそれについては確かですか? '{1,2} 'のため'> = 'または' <= 'または' = 'にマッチすると、一致するはずです。 – Jerry

+0

ありがとう@RohitJainこれはうまくいく[\ <=>] {1,2}エスケープ文字を追加する – saroll

10

これを試してみてください:

[<>]=?|= 

それは<または>、必要に応じて=、または単に=自身で続くと一致しました。

+0

+1すてきでコンパクトです。 :) – zx81