匹配完整的重复模式
Matching a full repeating pattern
我似乎无法理解这个正则表达式
https://regex101.com/r/cQ9nK8/38
这些应该匹配
- 313 年 1 月
- 1 月
- 一月.31.Feb.6
- GMI3.0.N.1
- 一月.31.Feb.6.March.7
这不应该匹配
- April.May
如您所见,它们是单独匹配的,但不是整体匹配的,我认为这行得通,但行不通
(?:[[:alnum:]]+(?:\.\d+)*)*
您可以使用重复模式:
首先匹配 [[:alpha:]]
,然后是可选的 [[:alnum:]]
(如果由点分隔的 2 部分中的第一部分不应以数字开头)
这将匹配 January
后面跟一个匹配数字的可选部分
这将匹配 January.313
可选地重复一个点后跟相同的图案
这将匹配最后 3 个示例。
模式
^[[:alpha:]][[:alnum:]]*(?:\.[[:digit:]]+(?:\.[[:alpha:]][[:alnum:]]*\.[[:digit:]]+)*)?$
没有 POSIX 符号的版本可能是
^[a-zA-Z][a-zA-Z0-9]*(?:\.[0-9]+(?:\.[a-zA-Z][a-zA-Z0-9]*\.[0-9]+)*)?$
^
字符串开头
[a-zA-Z][a-zA-Z0-9]*
匹配一个字符 a-zA-Z 可选后跟 a-zA-Z 和数字
(?:
非捕获组
\.[0-9]+
匹配一个 .
和 1+ 个数字
(?:\.[a-zA-Z][a-zA-Z0-9]*\.[0-9]+)*
可选地重复匹配 .
一个字符 a-zA-Z 可选地后跟 a-zA-Z 和数字,一个点和数字
)?
关闭组并使其可选
$
字符串结束
这是我的尝试:
^((?:^|\.)[A-Z][A-Z\d]*(?:$|\.\d+))(?1)*$
在线查看demo
^
- 开始字符串 ancor。
(
- 打开第一次捕获 group/pattern。
(?:
- 打开非捕获组。
^|\.
- 开始字符串或文字点。
)
- 关闭非捕获组。
[A-Z][A-Z\d]*
- 一个字母后跟零个或多个字母或数字。
(?:
- 打开非捕获组。
$|\.
- 结束字符串或文字点。
)
- 关闭非捕获组。
)
- 关闭第一次捕获 group/pattern。
(?1)*
- 重复捕获 group/pattern 零次或多次。
$
- 结束字符串锚点。
顺便说一句,我使用了不区分大小写的匹配。
我似乎无法理解这个正则表达式 https://regex101.com/r/cQ9nK8/38
这些应该匹配
- 313 年 1 月
- 1 月
- 一月.31.Feb.6
- GMI3.0.N.1
- 一月.31.Feb.6.March.7
这不应该匹配
- April.May
如您所见,它们是单独匹配的,但不是整体匹配的,我认为这行得通,但行不通
(?:[[:alnum:]]+(?:\.\d+)*)*
您可以使用重复模式:
首先匹配
[[:alpha:]]
,然后是可选的[[:alnum:]]
(如果由点分隔的 2 部分中的第一部分不应以数字开头)这将匹配
January
后面跟一个匹配数字的可选部分
这将匹配
January.313
可选地重复一个点后跟相同的图案
这将匹配最后 3 个示例。
模式
^[[:alpha:]][[:alnum:]]*(?:\.[[:digit:]]+(?:\.[[:alpha:]][[:alnum:]]*\.[[:digit:]]+)*)?$
没有 POSIX 符号的版本可能是
^[a-zA-Z][a-zA-Z0-9]*(?:\.[0-9]+(?:\.[a-zA-Z][a-zA-Z0-9]*\.[0-9]+)*)?$
^
字符串开头[a-zA-Z][a-zA-Z0-9]*
匹配一个字符 a-zA-Z 可选后跟 a-zA-Z 和数字(?:
非捕获组\.[0-9]+
匹配一个.
和 1+ 个数字(?:\.[a-zA-Z][a-zA-Z0-9]*\.[0-9]+)*
可选地重复匹配.
一个字符 a-zA-Z 可选地后跟 a-zA-Z 和数字,一个点和数字
)?
关闭组并使其可选$
字符串结束
这是我的尝试:
^((?:^|\.)[A-Z][A-Z\d]*(?:$|\.\d+))(?1)*$
在线查看demo
^
- 开始字符串 ancor。(
- 打开第一次捕获 group/pattern。(?:
- 打开非捕获组。^|\.
- 开始字符串或文字点。)
- 关闭非捕获组。
[A-Z][A-Z\d]*
- 一个字母后跟零个或多个字母或数字。(?:
- 打开非捕获组。$|\.
- 结束字符串或文字点。)
- 关闭非捕获组。)
- 关闭第一次捕获 group/pattern。
(?1)*
- 重复捕获 group/pattern 零次或多次。$
- 结束字符串锚点。
顺便说一句,我使用了不区分大小写的匹配。