2012-04-09 9 views
6

私は基本的にはそうのような一つの大きな「または」グループで自動的に生成された正規表現、持っている:私は貪欲な "または"正規表現のグループが存在しますか?

hat. 

の場合、それは「帽子」をマッチすることに気付きました

(\bthe\b|\bcat\b|\bin\b|\bhat\.\b|\bhat\b) 

をただ、 "帽子"ではありません。私が望むように。もっと貪欲にする方法はありますか?

更新日:単語の境界を忘れてしまいました。申し訳ありません。

+3

あなたはアイテムの順序を変更する以外にも意味がありますか? –

+0

@TimCooper、あなたを誤解して申し訳ありません、私は単語の境界を忘れました。基本的には、いくつかの特定の境界だけを一致させたい(例では "。")。 – Andrew

+1

単語境界を括弧の外に因数分解する。 ***非表示の文字の隣に置かないでください!!!!それはあなたが思っていることをしません。あなたが '\ b'が何をしているのか理解していなければ、全く使用しないでください。その後、長い順に並べ替えます。 – tchrist

答えて

9

hat\.hatの前に正規表現で置きます。交替で最初に一致する式が勝ちます。 hathat.と一致しますので、hat\.はチェックされません。

より良い方法は、hat\.|hatではなく、hat\.?と書いてください。これは期間を任意にして、交替で2つの用語を必要としないようにします。あなたの編集後

.との間に単語境界がありません

、たとえば、スペース(両方とも非単語の文字です)。だから\bhat\.\bは、hat.xのようなものでマッチするつもりで、その直後に別の文字が続きます。これは、例えば、文、hatは一致するものになります。私はあなたが解決策を見つけたのを見ます。

+0

これはまさにあなたのものです。私は単語の境界を忘れて、私の質問を確認してください。 – Andrew

+0

それは私の考えでもあった: '\ b(\ b | cat \ b | in \ b | hat \ b \。?)' –