PHP Regexp - если пользовательские символы пунктуации расположены рядом, то регулярное выражение не соответствует

мое регулярное выражение

/^[\p{L}\p{N}][\p{L}\p{N} \.,;:\?!-“”‘’"']+$/u

цель регулярного выражения

разрешить utf-8 символа, цифры, пробелы И пользовательские знаки препинания для подтверждения названия статьи

эти входные данные ниже не совпадают, но я хочу, чтобы они также сопоставлялись, если знаки препинания расположены рядом? Можете ли вы показать мне правильную форму моего регулярного выражения? примечание: обратная косая черта перед точкой и вопросительным знаком означает попытку экранирования. Я тоже пробовал без побега. Я не силен в регулярном выражении. Я могу только найти части, а затем попытаться объединить. Благодарю. BR

входы, которые не совпадают

  1. Селим!'':?-
  2. '
  3. '
  4. ?!
  5. Я также обнаружил, что не могу начать с пунктуации в заголовке. пример День названия не соответствует

person Andre Chenier    schedule 29.03.2013    source источник
comment
избежать - также: \-   -  person Joel Harkes    schedule 29.03.2013
comment
не работал к сожалению. Я знаю, что тире (-) НЕ является специальным символом, который нужно экранировать.   -  person Andre Chenier    schedule 29.03.2013
comment
/^\w*$/u должен соответствовать всем символам utf-8   -  person Joel Harkes    schedule 29.03.2013
comment
/^\w*$/u не соответствует дате заголовка на rubular.com   -  person Andre Chenier    schedule 29.03.2013


Ответы (2)


изменить с:

/^[\p{L}\p{N}“”‘’"'][\p{L}\p{N} .,;:?!\-“”‘’"']*$/u

NB: - необходимо экранировать, если он не находится в первой или последней позиции в классе символов. Но . и ? не нужны.

person Toto    schedule 29.03.2013

Вы принимаете квадратные скобки внутри символов регулярного выражения? Если да, то их нужно спасти.

/^[\p{L}\p{N}\]\[\p{L}\p{N} \.,;:\?!-“”‘’"']+$/u

Если нет, то вам нужно включить знаки препинания, которые вы разрешите внутри первого класса символов.

person Trenton Trama    schedule 29.03.2013
comment
Да, я сбежал перед 'символом как \', так как мой код if (!preg_match('/^[\p{L}\p{N}""''\'][\p{L}\p{N} .,;:?!\-""''\']*$/u',$str)). Спасибо и за предупреждение. - person Andre Chenier; 29.03.2013