PCRE正则表达式。允许拉丁文,希伯来文和希腊文字符

时间:2018-04-12 08:34:02

标签: regex pcre

条件:

  • 该字符串可以包含拉丁字符
  • 该字符串可以包含希伯来字符
  • 该字符串可以包含0,1,2个希腊字符字符

示例:

  • A ===>好
  • b ===>好
  • β===>好
  • ג===>好
  • aβ===>好
  • aaaββג===>好
  • aaaββגגג===>好
  • aβaגβaגג===>好
  • aβaaβגβגג===>坏

在那一刻,我有了这个,但没有控制希腊的极限

  

/ ^ [\ p {拉丁} \ p {希伯来语} \ p {希腊}] + $ / U

2 个答案:

答案 0 :(得分:1)

我猜你会这样(不可读)的方式

^([\p{Latin}\p{Hebrew}]*)(\p{Greek}?)([\p{Latin}\p{Hebrew}]*)(\p{Greek}?)([\p{Latin}\p{Hebrew}]*)$

重复的群组\ 1 \ 2 \ 1 \ 2 \ 1不起作用,因为他们匹配完全相同的字符串,而不是模式。

此正则表达式与您的示例匹配

答案 1 :(得分:1)

你可以使用一个简单的正则表达式,现在允许3个希腊字符,同时允许所有其他字符:

/^(?!(?:\P{Greek}*\p{Greek}){3})[\p{Latin}\p{Hebrew}\p{Greek}]+$/u

请参阅regex demo。您可以使用更多条件轻松自定义模式。

<强>详情

  • ^ - 字符串的开头
  • (?!(?:\P{Greek}*\p{Greek}){3}) - 立即从字符串的开头,尝试匹配3个重复的零个或多个非希腊字母(\P{Greek}*),在演示中,它被替换为[^\n\p{Greek}]*要正确匹配多行输入中的,然后是希腊字母,如果找到匹配项,则整个正则表达式匹配失败(不返回匹配项)
  • [\p{Latin}\p{Hebrew}\p{Greek}]+ - 一个或多个希腊语,拉丁语或希伯来语字母
  • $ - 字符串结尾(或者,更好的是,使用\z来匹配字符串的结尾)。