Правильное и недопустимое выражение

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

Invalid : M_123 ASD
Invalid : M_123#ASD
Invalid : 1_M# ADD
Valid : M_125ASD
Valid : M_125$ASD

Я пытаюсь, как показано ниже:

[A-Za-z0-9_$]

Не работает правильно. Мне нужно установить как действительные, так и недействительные наборы для слова.

Могу ли я сделать совпадение с регулярным выражением?

1

Решение

Ваше регулярное выражение [A-Za-z0-9_$] представляет класс символов, который соответствует одному символу, который является либо буквой ASCII, либо цифрой, либо _ или же $ символы. Если вы используете его с std::regex_match, это будет соответствовать только целая строка он состоит только из одного символа, так как шаблон по умолчанию привязывается при использовании с этим методом. Если вы используете его с std::regex_searchСтрока типа ([_]) пройдет, так как регулярное выражение не привязанного и может найти частичный Матчи.

Чтобы соответствовать 0 или более символов, необходимо добавить * квантификатор после вашего класса. Чтобы соответствовать одному или нескольким символам, необходимо добавить + квантификатор после вашего класса персонажа. Однако у вас есть дополнительное ограничение: цифра не может появляться в начале.

Кажется, вы можете использовать

^[A-Za-z][A-Za-z0-9_$]*$

Увидеть regex demo at regex101.com.

подробности:

  • ^ — начало строки
  • [A-Za-z] — письмо ASCII (ровно одно вхождение)
  • [A-Za-z0-9_$]* — 0+ букв ASCII, цифры, _ или же $
  • $ конец строки привязки.

Обратите внимание, что с regex_match, вы можете опустить ^ а также $ якоря.

1

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

Итак, требования

  • не может начинаться с числа (я предполагаю, что это начинается с алфавита)

  • не может содержать пробел или #

  • все остальные символы действительны

Вы можете попробовать это регулярное выражение ^[a-zA-Z]((?![\# ]).)+?$

^[a-zA-Z] проверяет алфавит в начале строки
((?![\# ]).)+?$ проверяет, нет ли # или же space в оставшейся части линии.

Онлайн демо Вот

РЕДАКТИРОВАТЬ

Согласно комментарию Виктора, регулярное выражение может быть упрощено до ^[a-zA-Z][^# ]+$,

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector