Вопросы по якорям регулярных выражений

185
13 марта 2018, 03:42
  1. Чем отличаются якоря начала строки ^ и начала текста \A я думал второй действует только на буквы, но нет, он и пробел и символы видит.

  2. Такой же вопрос про конец строки $ и конец текста \Z

  3. В PHP работают регулярки с якорями на начало слова /< и конец слова />? Т.к. тест показывает что он просто видит тег https://regex101.com/r/Ly86wY/1

Answer 1

Чем отличаются якоря начала строки ^ и начала текста \A я думал второй действует только на буквы, но нет, он и пробел и символы видит.

Якорные метасимволы и другие «проверки с нулевой длиной совпадения» совпадают не с реальными символами, а с позициями в тексте.

Начало физической или логической строки: ^, \A

Метасимвол ^ совпадает в начале текста, в котором производится поиск, или в расширенном режиме привязки к границам строк (при использовании модификатора m) - в позиции после любого символа новой строки. Метасимвол \A (если он поддерживается) совпадает только в начале текста, независимо от режима поиска.

Такой же вопрос про конец строки $ и конец текста \Z

Конец физической или логической строки: $, \Z, \z

Концепция «конца строки» несколько сложнее парной ей концепции начала строки. В разных реализациях $ интерпретируется по-разному. В самом распространенном варианте он совпадает с концом целевого текста перед завершающим символом новой строки. Это сделано для того, чтобы выражения вида ~s$~ («строка,заканчивающаяся символом s») совпадали с комбинациями символов ~…s\n~ в тексте, когда строки завершаются буквой s и символом новой строки.

Выбор режима может повлиять на интерпретацию $, в результате он будет соответствовать любым промежуточным символам новой строки в блоке текста.

Метасимвол \Z (если он поддерживается) соответствует метасимволу $ в стандартном режиме, что означает совпадение в конце текста или перед символом новой строки, завершающим текст. Парный метасимвол \z совпадает только в конце строки, без учета возможных символов новой строки.

В PHP работают регулярки с якорями на начало слова /< и конец слова />? Т.к. тест показывает что он просто видит тег

Границы слов: \b, \B

В PHP для обозначения границы слова используется последовательность символов \b. Она совпадает не с символом, а с определенной позицией в строке. Также определяется метапоследовательность для любой позиции, не являющейся границей слова \B.

Программы, которые не различают якорные метасимволы для начала и конца слова, но поддерживают опережающую проверку, могут имитировать их при помощи опережающей проверки:

(?<!\pL)(?=\pL) - эквивалент позиции, являющейся границей слова \b

(?<=\pL)(?!\pL) - эквивалент позиции, не являющейся границей слова \B

READ ALSO
Что означает следующая ошибка? PHP, SQL

Что означает следующая ошибка? PHP, SQL

При запросе возникает следующая ошибка:

238
Группировка выборки MySql

Группировка выборки MySql

Если после выборки из базы у меня есть такой результат

193
Настройка подлючения к БД (Symfony)

Настройка подлючения к БД (Symfony)

При открытии сайта, появляется ошибка:

202
MYSQLI SELECT Fatal error

MYSQLI SELECT Fatal error

При попытке получить UUID выдает ошибку

144