如何更改(.NET)正则表达式中组的优先级



我正在尝试构建一个。NET正则表达式匹配以下内容:

  1. 字符串必须由用点分隔的字母数字标识符组成
  2. 必须至少有2个元素(一个点(,但最大值没有限制
  3. 最后一个元素必须以大写字符开头

以下是我尝试过的:

^(w+)(.w+){0,1}(.[A-Z]w+)$
^(w+)(.w+)?(.[A-Z]w+)$

我得到的结果是:

Flubber.flobber.Blobber-匹配成功(正确(
Flubber.flobber.blobber-不匹配(正确:最后一个元素不以大写字母开头(
A.B-不匹配。这符合所有规则,应该会成功。

问题显然是表达式正在匹配第二个项,然后没有剩余的输入来匹配最后一个项。如何更改此行为以使最后一项优先?

我对您的代码进行了两次更改

^(w+)(.w+)*(.[A-Z]w*)$   // new code, make the last character 
// following the capital optional so it'll match only one capital letter at the end
// and swapped out the first "?" with "*" to match more than two or three "groups"
^(w+)(.w+)?(.[A-Z]w+)$   // your code

请参阅https://regex101.com/r/WtEGuG/3

您的代码不适用于Ax.Bx.Cx.Dx以及A.B

最新更新