2016-05-02 12 views
-2

私はいくつかの正規表現の助けを必要としています。正規表現のヘルプ(作業が、除外を必要とする)

私はそうのようなリストを持っている:

/hours_3203 
/hours_3204 
/hours_3205 
/hours_3206 
/hours_3207 
/hours_3208 
/hours_3309 
/hours_3310 
/hours_3211 

私は32または33で始まるすべてのエントリを見つけるために、この正規表現を使用しています:

/hours_3[23]/ 

をし、これが動作しています。

しかし、私はが必要であると言われたときカーボールを投げたhours_3211をこのリストから除外しました。

は、どのように私は私の正規表現は、すべてのhours_3[23]に一致ではなく/hours_3211に合うように調整することができますか?

代わりに、私はこのようなリストを持っている:

/hours_3412 
/hours_3413 
/hours_3414 
/hours_3415 
/hours_3516 
/hours_3517 
/hours_3518 
/hours_3519 

私は正規表現使用されています:私は調整することができますどのようにすべてのhours_34x/hours_35x

を見つけること

/hours_3[45]/ 

をこの:

/hours_3[45]/ 

以上が、/hours_3211?見つける/マッチを見つけるには?

答えて

1

がどのように私は私の正規表現は、すべてのhours_3[23]に一致ではなくhours_3211に合うように調整することができ否定先読みでしょうか?

利用否定先読み(?!)

/hours_3(?!211)[23]/ 

私は/hours_3211にマッチ/上記を見つけるだけでなく、見つけること/hours_3[45]/を調整することができますどのように?

使用交代|

/hours_3(?:[45]|211)/ 

編集:それは一致するかどう

より適切に、上記のみを指定します。あなたは、実際の完全一致が返さたい場合は、そのように正規表現の末尾に.*を追加したい:両方の部品への答えのための

/hours_3(?!211)[23].*/ 
/hours_3(?:[45]|211).*/ 
+0

感謝を!他の人はまだ投票を続けた。 これら両方のも私の仕事: /hours_3を([45] | 211)/ /hours_3(20 | 3)/ 、それらの間に存在しているどのくらいの差がわかりませんか? (正規表現の力はこれで弱いです!)HAHA ...より高度な正規表現はまだ私を逃げます。 – whispers

+0

'(?:)'は非キャプチャグループと呼ばれます。これは出力に一致することなくグループ化するために使用されます。私はこれがJavaScriptであると仮定しています(私が間違っていれば修正します)。したがって、通常のグループ化 '()'を使用して 'String.prototype.match()'を使用しようとすると、式全体が '()'にあるものも出力の2番目の一致として出力されます。この場合、 '(?:)'を使用すると、一致するものだけが返されます。 – timolawl

+0

@whispers '/ hours_3(20 | 3)/'の場合、 'hours_3210'のようなものにマッチさせたくないと仮定して、これはうまくいきます。 – timolawl

4

hours_3[23]に一致するように正規表現を調整するにはどうすればよいですか?hours_3211には一致しませんか?

あなたは否定先読みサブパターンを挿入し使用することができます

/hours_3(?!211)[23]/ 

(?!211)は許可しないように否定先読みで211ので、私はあなたが第二の正規表現に3211を追加すると仮定していhours_3211

1

を禁止hours_3後これは....このようなものになるだろう

hours_(3[45]|3211) 

最初のものは

hours_3[23](?!11) 
関連する問題