Регулярное выражение не соответствует заданным входным данным

#regex

Вопрос:

Я хочу захватить любые строки, которые начинаются с NC или VSS, содержат _5 или заканчиваются _2 . ниже приведена та, которую я построил, но по какой-то причине она не работает

 ^(NC|VSS)(_5) (_2)$
 

для ввода CLKOUT_SRC_N_2 он не совпадает, несмотря на то, что заканчивается на _2.
Я изменил Reg Ex на ^(NC|VSS)|(_5) |(_2)$ «тогда CLKOUT_SRC_P_5 соответствует». Здесь _5 находится в конце строки. как мне изменить строку, если мне нужно _5 быть где-то в середине строки, так как в моем заявлении prob говорится, что не в конце?

Ответ №1:

Основываясь на приведенных вами примерах и объяснениях, я пришел к следующему регулярному выражению:

(^(NC|VSS)|. (_5). |(_2)$)

Это работает соответственно: https://regex101.com/r/SHFJhG/1

как мне изменить строку, если мне нужно, чтобы _5 был где-то посередине строки…

Я добавил . сразу после и перед (_5) , так что это гарантирует, что у нас должен быть по крайней мере один персонаж до и после появления _5 .

Ответ №2:

Основываясь на вашем описании, вы можете использовать:

 ^(?:NC|VSS)|(?<!^)_5(?!$)|_2$
 

ДЕМОНСТРАЦИЯ.

Разрушение:

  • ^(?:NC|VSS) — Сопоставьте «NC» или «VSS» в начале строки.
  • (?<!^)_5(?!$) — Сопоставьте «_5», которое не находится ни в начале, ни в конце строки.
  • _2$ — Сопоставьте «_2» в конце строки.

Ответ №3:

Вы можете окружить _5 его 2 точками, чтобы слева и справа был по крайней мере один символ (точка соответствует любому символу, кроме новой строки), и использовать чередование | для разделения совпадений.

 ^(NC|VSS)|.(_5).|(_2)$
 

Шаблон совпадает

  • ^(NC|VSS) Захватите либо NC или VSS в группе 1 в начале строки
  • | Или
  • .(_5). Захват _5 в группе 2 окружен точкой, чтобы она не могла быть в начале или в конце строки
  • | Или
  • (_2)$ Захват _2 в группе 3 в конце строки

Демонстрация регулярных выражений

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

1. Разве для этого не нужно после . чтобы убедиться, что в середине строки есть хотя бы одно вхождение _5?

2. Нет, самой точки достаточно, чтобы убедиться, что она не в конце