REGEX-在preg_match中如何使变音符号不敏感?

时间:2019-01-18 03:02:56

标签: php regex preg-match pcre

是否有一种方法可以使用preg_match(例如,通过标志)来进行不区分变音符号的匹配?

例如,说我想要匹配:

  • 咖啡馆
  • 咖啡馆

我知道我可以做这样的正则表达式:caf[eé]。只要我没有遇到e的其他变音符号,例如ê è ë ē ĕ ě ẽ ė ẹ ę ẻ,此正则表达式就可以使用。

当然,我可以在正则表达式中列出所有这些变音符号,例如caf[eêéèëēĕěẽėẹęẻ]。只要我什么都不会错过,我就会很好。我只需要对字母表中的所有字母执行此操作,这是一个乏味且容易出错的解决方案。

对于我来说,在主题中找到变音字母并用其非变音字母替代不是一种选择。我需要保持原样。

对我来说,理想的解决方案是让正则表达式对变音符号不敏感。在上面的示例中,我希望我的正则表达式为:cafe。这可能吗?

1 个答案:

答案 0 :(得分:1)

如果您愿意匹配任何一种语言的字母(包括带有双音符号的字符),则可以使用\p{L}\p{Letter},如下所示: https://regex101.com/r/UBGQI6/3

根据 regular-expressions.info

  

\ 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}:没有小写和大写变体的字母或表意文字。
  •   

唯一的不足是,您无法搜索带有变音符号的特定字母,例如È,因此您不能将搜索范围限制为英语字母。