web-dev-qa-db-ja.com

PHPの「-」を除くすべての特殊文字を正規表現と一致させる方法は?

PHPの文字+_*&^%$#@!~を除くすべての「特別な」文字(-など)を一致させるにはどうすればよいですか?

\Wは、-を含むすべての「特別な」文字と一致することを知っています。

Unicode文字を考慮した提案はありますか?

12
CaTz
  • \pLは、主要な一般カテゴリグループであるUnicode Letter文字プロパティを持つ任意の文字と一致します。つまり、[\p{Ll}\p{Lt}\p{Lu}\p{Lm}\p{Lo}]と一致します。
  • \pNは、主要な一般カテゴリグループであるUnicode Number文字プロパティを持つ任意の文字と一致します。つまり、[\p{Nd}\p{Nl}\p{No}]と一致します。
  • Unicode Alphabetic文字プロパティには、U + 0345◌ͅᴄᴏᴍʙɪɴɪɴɢɢʀᴇᴇᴋʏᴘᴏɢᴇɢʀᴀᴍᴍᴍなどの特定の結合マークも含まれていることに注意してください。 \pMも含めることをお勧めします。これは、主要な一般カテゴリグループであるUnicode Mark文字プロパティを持つ任意の文字と一致します。つまり、[\p{Mn}\p{Me}\p{Mc}]と一致します。
  • 文字U +002Dʜʏᴘʜᴇɴ-ᴍɪɴᴜꜱはおそらくあなたが参照している-です。
  • Unicode v6.1には27文字 Unicode Dash文字プロパティがあり、U +2010ʜʏᴘʜᴇɴ、U +2013ᴇɴᴅᴀꜱʜ、U +2014ᴇᴍᴅᴀꜱʜなどの一般的な文字が含まれていることに注意してください。 、およびU +2212ᴍɪɴᴜꜱꜱɪɢɴ。実際にそれらを含めたいのか除外したいのか、私にはわかりません。

それをすべて考えると、次のようなものが必要になる可能性はほとんどありません。

[^\pL\pN\pM\x2D\x{2010}-\x{2015}\x{2212}]
6
tchrist

このパターンを試すことができます

([^a-zA-Z-])

これは、a-zおよび-以外のすべての文字と一致する必要があります

3