5

私はしばらくの間これに頭を悩ませてきました:[a-z]+[0-9]?などの文字列を除くすべての文字シーケンスをキャプチャしたいsin|cos|tanので、正規表現の宿題を済ませると、次の正規表現が機能するはずです。

(?:(?!(sin|cos|tan)))\b[a-z]+[0-9]?

ご覧のとおり、私は交互にネガティブルックアヘッドを使用しています-キャプチャされていないグループの後に括弧を閉じることは、などの\b一致を避けるために重要です。正規表現は理にかなっており、実際のところ、正規表現としてRegexBuddyとJavaを使用して試しました。実装をターゲットにして目的の結果を取得しますが、JavaMatcherおよびPatternオブジェクトを使用しても機能しません。何かご意見は?insin

乾杯

4

3 に答える 3

6

\b間違った場所にあります。その前にsin/cos/tan を持たない単語境界を探します。しかし、それらの直後の境界最後に文字があるため、単語の終わりの境界でなければなりません。次の文字が az の場合はそうではありません。

Also, the negative lookahead would (if it worked) exclude strings like cost, which I'm not sure you want if you're just filtering out keywords.

I suggest:

\b(?!sin\b|cos\b|tan\b)[a-z]+[0-9]?\b

Or, more simply, you could just match \b[a-z]+[0-9]?\b and filter out the strings in the keyword list afterwards. You don't always have to do everything in regex.

于 2010-02-03T10:42:49.833 に答える
1

したがって[a-z]+[0-9]?、その文字シーケンスsin cos tan?

\b(?!(sin|cos|tan)(?=\d|\b))[a-z]+\d?\b

結果:

cos - 一致しない
コージー - フルマッチ
cos1 - 一致しない
cosy1 - 完全一致
bla9 - 完全一致
bla99 - 一致しない
于 2010-02-03T10:45:39.640 に答える
0

\bfor javaをエスケープするのを忘れたので、そうする\b必要が\\bあり、現在は機能しています。乾杯

于 2010-02-03T11:11:53.900 に答える