正则表达式与给定输入不匹配

时间:2021-05-07 00:57:39

标签: 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 语句在最后说不是,我该如何修改字符串?

3 个答案:

答案 0 :(得分:2)

根据您给出的示例和解释,我想出了以下正则表达式:

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

它相应地工作:https://regex101.com/r/SHFJhG/1

<块引用>

如果我需要 _5 在中间的某个地方,我该如何修改字符串 字符串...

我在 .+ 之后和之前添加了一个 (_5),因此它保证在出现 _5 之前和之后至少应该有一个字符。

答案 1 :(得分:1)

根据您的描述,您可以使用:

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

Demo.

细分:

  • ^(?:NC|VSS) - 匹配字符串开头的“NC”或“VSS”。
  • (?<!^)_5(?!$) - 匹配既不在字符串开头也不在结尾的“_5”。
  • _2$ - 匹配字符串末尾的“_2”。

答案 2 :(得分:1)

您可以用 2 个点将 _5 括起来,这样左边和右边至少应该有一个字符(该点匹配除换行符以外的任何字符),并使用交替 |分隔匹配项。

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

模式匹配

  • ^(NC|VSS) 在字符串的开头捕获第 1 组中的 NCVSS
  • |
  • .(_5). 将第 2 组中的 _5 用一个点包围起来,使其不能在字符串的开头或结尾
  • |
  • (_2)$ 在第 3 组中捕获字符串末尾的 _2

Regex demo