UTF-8 の文字と数字、ダッシュ記号 ( -
) に一致する正規表現が必要ですが、アンダースコア ( ) には一致しません_
。これらの愚かな試みを試みましたが成功しませんでした。
([\w-^_])+
([\w^_]-?)+
(\w[^_]-?)+
はの\w
省略形ですが、修飾子が設定され[A-Za-z0-9_]
ている場合は UTF-8 文字にも一致します。u
誰でもこれで私を助けることができますか?
これを試して:
(?:[\w\-](?<!_))+
これは、\w (またはダッシュ) としてエンコードされたものに対して単純な一致を行い、一致したばかりの文字がアンダースコアでないことを保証するゼロ幅の後読みを行います。
それ以外の場合は、次のいずれかを選択できます。
(?:[^_\W]|-)+
これは、よりセットベースのアプローチです (大文字の W に注意してください)。
OK、私は php の PCRE のフレーバーでユニコードをとても楽しんでいました:D Peekaboo は、利用可能な簡単な解決策があると言います:
[\p{L}\p{N}\-]+
\p{L} は文字 (注: 単語の文字ではないため、アンダースコアはありません) と見なされるすべての Unicode に一致しますが、\p{N} は数字のように見えるすべてのもの (ローマ数字やよりエキゾチックなものを含む) に一致します。
\- はエスケープされたダッシュです。厳密には必要ではありませんが、文字クラスではダッシュをエスケープするように心がけています... Unicode には数十の異なるダッシュがあるため、次のバージョンが生成されることに注意してください。
[\p{L}\p{N}\p{Pd}]+
ここで、「Pd」は句読点ダッシュであり、マイナス ダッシュのものを含みますが、これに限定されません。(ここでもアンダースコアがないことに注意してください)。
どの言語を使用しているかわかりませんが、PERL では、正しいロケールが設定されている場合は [[:alnum:]-]+ と書くだけです。