регулярное выражение — использование обратных ссылок с php preg_match_all

Я новичок в regex и php, но я столкнулся с проблемой, с которой не могу справиться в одиночку.

Я подготовил это регулярное выражение, чтобы найти шаблоны, начинающиеся с заглавной буквы. Это может звучать примерно так:

  • захватить любой шаблон, который

  • начинается с одной или нескольких заглавных букв

  • затем одну или несколько букв или символов в списке

  • затем пробел или знак пунктуации

  • и я использую обратную ссылку, чтобы установить желаемый шаблон до 3 раз:

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

В соответствии с https://regex101.com/r/pB3nY7/2 это работает как регулярное выражение javascript, но не как регулярное выражение php.

Я проверил другие посты и убедился:

  • Я использую одинарные кавычки вместо двойных

  • и я «защитил» \ в моем скрипте php:

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

Но он по-прежнему не может совпадать ни с одним шаблоном, начинающимся с заглавной буквы.

Заранее благодарим за все советы, которые вы можете дать,

С Уважением,

Чарльз

0

Решение

я проверил это на этом сайте http://www.phpliveregex.com/ :

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

Другие решения

Чтобы быть более универсальным, вы можете использовать свойства юникода:

^(\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);
0