使用php preg_match_all的反向引用

时间:2016-02-17 13:09:54

标签: php regex backreference

我是正则表达式和php的新手,但我面临一个我无法单独处理的问题。

我已经准备好了这个正则表达式来查找以大写字母开头的模式。听起来像是:

  • 捕获

  • 的所有模式
  • 以一个或多个大写字母

  • 开头
  • 然后列表中的一个或多个字母或字符

  • 然后是空格或标点符号

  • 我使用反向引用设置我希望这些模式最多3次:

    ([A-ZÁÀÂÄÉÈÊËÍÌÎÏÓÒÔÖÚÙÛÜ]{1,}[a-zàáâãäåçèéêëìíîïðòóôõöùúûüýÿ;:«0-9]{1,}[\s-….?,;]\1{1,3})
    

根据https://regex101.com/r/pB3nY7/2,它可以作为javascript正则表达式,但不能作为php正则表达式。

我已经对其他帖子进行了调查并确保:

  • 我使用单引号而不是双引号

  • 我和#34;受保护"我的PHP脚本中的\:

    '#([A-ZÁÀÂÄÉÈÊËÍÌÎÏÓÒÔÖÚÙÛÜ]{1,}[a-zàáâãäåçèéêëìíîïðòóôõöùúûüýÿ;:«0-9]{1,}[\\s-….?,;]\\1{1,3})#'
    

但它仍然无法匹配任何以大写字母开头的模式。

提前感谢您提供的所有建议,

此致

查尔斯

2 个答案:

答案 0 :(得分:0)

我在这个网站上http://www.phpliveregex.com/进行了测试:

(^[A-ZÁÀÂÄÉÈÊËÍÌÎÏÓÒÔÖÚÙÛÜ]{1,}[a-zàáâãäåçèéêëìíîïðòóôõöùúûüýÿ;:«0-9]{1,}[\s-….?,;]{1,1}){1,3}

答案 1 :(得分:0)

为了更通用,您可以使用unicode属性:

^(\p[Lu}+[\p{Ll};:«0-9]+[\s\p{P}]){1,3}

\p[Lu}代表大写字母,\p{Ll}代表小写字母,\p{P}代表标点符号。

preg_match('/^(\p[Lu}+[\p{Ll};:«0-9]+[\s\p{P}]){1,3}/', $string, $match);