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

#php #regex #grammar

#php #регулярное выражение #грамматика

Вопрос:

Итак, я хочу проверить строку на основе того, содержит ли она только грамматические символы, а также цифры и буквы. (в основном от А доЯ, от а до я, 0-9, плюс точки (.), запятые (,) двоеточия (:), точки с запятой (;), дефисы (-), одинарные кавычки (‘), двойные кавычки («) и круглые скобки (). Я получаю сообщение об ошибке PHP, в котором говорится: «Ошибка компиляции: не по порядку в классе символов». Какой код регулярных выражений я должен использовать?

Это тот, который я сейчас использую: ^[a-zA-Z0-9_:;-()'" ]*^

Комментарии:

1. Что вы подразумеваете под «грамматическими символами»?

Ответ №1:

Вам нужно выполнить escape - , который затем станет этим ^[a-zA-Z0-9_:;-()'" ]* . - имеет особое значение внутри набора символов, поэтому его нужно экранировать. ^ в конце также нет необходимости. Регулярное выражение также можно упростить, используя w следующим образом

 ^[w:;()'"s-]*
  

w сопоставляет буквы, цифры и символы подчеркивания.

Комментарии:

1. Ах, не понимал, что мне нужно избегать дефисов. Спасибо. Ваш ответ будет принят, как только он позволит мне принять его.

2. @ShoeLace1291 Лучше, если вы используете s вместо ` `, потому что может быть более ясно, что задействован пробел. Кроме того, нет необходимости экранировать "

Ответ №2:

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

  • Экранирование с помощью обратной косой черты ( ^[a-zA-Z0-9_:;-()'" ]*^ )
  • Помещаем его в начало ( ^[-a-zA-Z0-9_:;()'" ]*^ )
  • Помещаем его в конец ( ^[a-zA-Z0-9_:;()'" -]*^ )