Необходимы ли регулярные выражения "(" и ")"? - PullRequest
0 голосов
/ 15 февраля 2020

Должен ли я использовать ( и ), только если шаблон состоит из нескольких групп?

Так что, если шаблон true|false, не имеет значения, добавляю ли я скобки или нет, правильно? Опять же, если шаблон POINT_PATTERN("\\((\\d+),(\\d+)\\)"), он действительно имеет значение, потому что я хочу получить из него два разных значения.

Могу ли я написать свои текущие шаблоны, которые:

NUMBER_PATTERN("(?!(0[0-9]))[0-9]+"),
BOOLEAN_PATTERN("(true|false)"),
STRING_PATTERN("(\\w+)"),
INTEGER_PATTERN("/^([+-]?[1-9]\\d*|0)$/"),

как

NUMBER_PATTERN("(?!0[0-9])[0-9]+"),
BOOLEAN_PATTERN("true|false"),
STRING_PATTERN("\\w+"),
INTEGER_PATTERN("^[+-]?[1-9]\\d*|0$");

без потерь?

Я особенно не уверен насчет NUMER_PATTERN и INTEGER_PATTERN. Есть ли другая причина, почему я не должен этого делать (плохой стиль кодирования, ...)?

1 Ответ

1 голос
/ 15 февраля 2020

Да, последовательность символов или классов символов используется по умолчанию и имеет более высокий приоритет, чем оператор ИЛИ |. Поэтому, если у вас нет ничего впереди или позади вашей последовательности (ясно отображаемой в ваших случаях true|false), тогда вам это не нужно.

Однако, если вы хотите использовать, например, this is true|false для "this is true" или "this is false" тогда приоритет не будет установлен для "this is false", и вам необходимо сгруппировать true|false, например, используя не захватывающую группу , например, this is (?:true|false).

Я не вижу проблем с вашими выражениями, когда вы удалили некоторые скобки. Однако, если вы хотите проверить их, просто поместите их в (онлайн) средство проверки, которое показывает приоритет (например, this ) и проверьте, изменяется ли полученное «объяснение». Надеемся, что различные плагины IDE для тестирования регулярных выражений также обеспечат вам аналогичное представление дерева .

Остерегайтесь того, что вы иногда используете сопоставители границ (^ и $), а иногда и вы не. Я ожидаю, что они будут использоваться или не использоваться.

...