我正在尝试构建一个。NET正则表达式匹配以下内容:
- 字符串必须由用点分隔的字母数字标识符组成
- 必须至少有2个元素(一个点(,但最大值没有限制
- 最后一个元素必须以大写字符开头
以下是我尝试过的:
^(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