正则表达式具有各种特性,最近在PHP和中创建正则表达式时遇到了其中的一种preg_match
。当我遇到问题时,我试图解析格式为“实名(:username)”的字符串,在Mozilla上我会看到很多东西:我的正则表达式没有正确捕获“特殊”或“国际”字母,例如à ,é,ü以及其他数十种。
我的正则表达式A-z
在正则表达式的实名匹配部分中使用,我认为它将与特殊字母匹配,但是没有:
preg_match (
“ /([[A-Za-z-] +)? s? [?(?:([A-Za-z0-9 - _] +))?]?//” ,
“ YepNopé[:ynope]” , $ matches );
// 0 =>'[:ynope]',1 =>'YepNopé',2 =>'ynope'
为了匹配国际字母,我需要以两种方式更新正则表达式:
- 更改
A-z
为pL
匹配项内 - 添加
u
修饰符会使字符串被视为UTF-8
更新后的正则表达式为:
preg_match (
“ /([[pL-] +)? s? [?(?:([ pL0-9 - _] +))?]?/ u” ,
“是的[ :ynope]“ , $ matches );
// 0 =>'YepNopé[:ynope]',1 =>'YepNopé',2 =>'ynope'
您可以在这里看到我的简易测试床。如果您担心其他字符会渗入或不信任pL
,可以手动列出每个特殊字母(例如[A-zàáâä....]
)
在像Mozilla这样的真正全球化的组织中工作的一个不错的方面之一是,我遇到了很多极端情况。在这种情况下,一些特殊的字母!
以上内容希望帮助到大家,很多PHPer在进阶的时候总会遇到一些问题和瓶颈,业务代码写多了没有方向感,不知道该从那里入手去提升,对此我整理了一些资料,包括但不限于:分布式架构、高可扩展、高性能、高并发、服务器性能调优、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等多个知识点高级进阶干货需要的可以免费分享给大家,需要戳这里PHP进阶架构师>>>视频、面试文档免费获取
或 者关注我每天分享技术文章
进阶PHP架构师www.zhihu.com翻译来源:https://davidwalsh.name/letters-regex