2012-04-17 24 views
21

ハイフンを境界として考慮しない式にマッチする正規表現が必要です。 つまり、ハイフンを除く正規表​​現の単語境界

と一致するすべての式を取得します。
type ([a-z])\b 

ただし一致しません。私の代わりに単語文字クラス[A-Za-z0-9_]を使用しての、拡張クラスを使用する単語の境界演算子\ bの同等たい:[A-Za-z0-9_-]

+0

これは.NET、javascriptなどですか? – Jay

+0

@Jay:私は.NETを使用しています – eyaler

答えて

19

あなたはこのために先読みを使用することができますが、言い換えれする

type a-1 

最短は否定先読みを使用することです:

type ([a-z])(?![\w-]) 

(?![\w-])は「次の文字が\wであるか-であれば、一致に失敗」を意味します。ここで

は、通常の先読みを使用していますオプションです:

type ([a-z])(?=[^\w-]|$) 

次の文字が文字クラス[\w-]ていないか、これはの終わりである場合にのみ一致」として(?=[^\w-]|$)を読むことができます文字列 "です。

それは作業を参照してください:http://www.rubular.com/r/NHYhv72znm

+2

これはルックアラウンドなしで行うことができますか? – eyaler

4

私は境界文字として「*」を考えたくなかった以外、私はかなり類似した問題がありました。ここでは、私がやったことだ:

\b(?<!\*)[^\s\*]+)\b(?!*) 

基本的に、あなたはワード境界にいる場合は、1つの文字を見て、前の文字が「*」だった場合一致しません。あなたが真ん中にいる場合は、スペースやアスタリスクでマッチしないでください。最後にいる場合は、末尾にアスタリスクがないことを確認してください。あなたの場合は、\ sの代わりに\ wを使うことができると思います。私にとって、これは次のような状況でうまくいきました:

*word 
wo*rd 
word* 
+2

正規表現の構文が無効です – MaxZoom

関連する問題