36

単語境界で終わる式に一致する正規表現が必要ですが、ハイフンを境界とは見なしません。つまり、一致するすべての式を取得します

type ([a-z])\b

しかし、一致しません。

type a-1

[A-Za-z0-9_]言い換えると、単語 character classを使用する代わりに、拡張クラスを使用する単語境界演算子 \b に相当するものが必要です。[A-Za-z0-9_-]

4

2 に答える 2

35

これには先読みを使用できます。最短は、否定的な先読みを使用することです。

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

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

以下は、通常の先読みを使用するオプションです。

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

「次の文字が文字クラスにない場合、またはこれが文字列の最後である(?=[^\w-]|$)場合にのみ一致する」と読むことができます。[\w-]

動作を確認してください: http://www.rubular.com/r/NHYhv72znm

于 2012-04-17T18:03:06.110 に答える
14

「*」を境界文字と見なしたくないことを除いて、かなり似た問題がありました。これが私がしたことです:

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

基本的に、単語の境界にいる場合は、1 文字戻って、前の文字が「*」だった場合は一致しません。中間の場合は、スペースやアスタリスクで一致させないでください。最後にいる場合は、最後がアスタリスクでないことを確認してください。あなたの場合、\s の代わりに \w を使用できると思います。私にとって、これは次の状況で機能しました。

*word
wo*rd
word*
于 2014-08-28T01:52:34.687 に答える