开放的编程资料库

当前位置:我爱分享网 > PHP教程 > 正文

使用 PHP 正则表达式匹配特殊字母

正则表达式具有各种特性,其中之一是我最近在 PHP 和 preg_match 中创建正则表达式时遇到的。当我遇到一个问题时,我试图解析格式为“真实姓名(:用户名)”的字符串,我在 Mozilla 经常遇到这样的问题:我的正则表达式没有正确捕捉“特殊”或“国际”字母,例如 à , é, ü 和其他几十个。

我的正则表达式在正则表达式的实名匹配部分使用了 A-z,我认为它会匹配特殊字母,但事实并非如此:

preg_match(
  "/([A-Za-z -]+)?\s?\[?\(?:([A-Za-z0-9\-\_]+)\)?\]?/", 
  "Yep Nopé [:ynope]", $matches);

// 0 => '[:ynope]', 1 => 'Yep Nopé', 2 => 'ynope'

为了匹配国际字母,我需要通过两种方式更新我的正则表达式:

  • 在匹配片段中将 A-z 更改为 \pL
  • 添加 u 修饰符使字符串被视为 UTF-8

更新后的正则表达式为:

preg_match(
  "/([\pL -]+)?\s?\[?\(?:([\pL0-9\-\_]+)\)?\]?/u", 
  "Yep Nopé [:ynope]", $matches);

// 0 => 'Yep Nopé [:ynope]', 1 => 'Yep Nopé', 2 => 'ynope'

你可以在这里看到我的简单测试平台。如果您担心其他字符可能会渗入,或者不信任 \pL,您可以手动列出每个特殊字母(即 [A-zàáâä....])

在像 Mozilla 这样真正的全球性组织工作的好处之一是我会接触到许多边缘案例;在这种情况下,一些特殊字母!

未经允许不得转载:我爱分享网 » 使用 PHP 正则表达式匹配特殊字母

感觉很棒!可以赞赏支持我哟~

赞(0) 打赏