#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_:;()'" -]*^
)