是否有一种方法可以使用preg_match
(例如,通过标志)来进行不区分变音符号的匹配?
例如,说我想要匹配:
我知道我可以做这样的正则表达式:caf[eé]
。只要我没有遇到e
的其他变音符号,例如ê è ë ē ĕ ě ẽ ė ẹ ę ẻ
,此正则表达式就可以使用。
当然,我可以在正则表达式中列出所有这些变音符号,例如caf[eêéèëēĕěẽėẹęẻ]
。只要我什么都不会错过,我就会很好。我只需要对字母表中的所有字母执行此操作,这是一个乏味且容易出错的解决方案。
对于我来说,在主题中找到变音字母并用其非变音字母替代不是一种选择。我需要保持原样。
对我来说,理想的解决方案是让正则表达式对变音符号不敏感。在上面的示例中,我希望我的正则表达式为:cafe
。这可能吗?
答案 0 :(得分:1)
如果您愿意匹配任何一种语言的字母(包括带有双音符号的字符),则可以使用\p{L}
或\p{Letter}
,如下所示: https://regex101.com/r/UBGQI6/3
\ p {L}或\ p {Letter}:来自任何语言的任何字母。
- \ p {Ll}或\ p {Lowercase_Letter}:具有大写字母变体的小写字母。
- \ p {Lu}或\ p {Uppercase_Letter}:具有小写字母变体的大写字母。
- \ p {Lt}或\ p {Titlecase_Letter}:仅当单词的第一个字母大写时出现在单词开头的字母。
- \ p {L&}或\ p {Cased_Letter}:存在小写和大写变体(Ll,Lu和Lt的组合)的字母。
- \ p {Lm}或\ p {Modifier_Letter}:类似于字母的特殊字符。
- \ p {Lo}或\ p {Other_Letter}:没有小写和大写变体的字母或表意文字。
唯一的不足是,您无法搜索带有变音符号的特定字母,例如È
,因此您不能将搜索范围限制为英语字母。