perl 正则表达式匹配两个或至少一个单词

nhaq1z21  于 2023-08-06  发布在  Perl
关注(0)|答案(1)|浏览(152)

我的正则表达式字符串有问题。我有两个字符串的组合如下,

2.3.8.2.2.1.2.3.4.12345 = WORDS: "String to capture"
2.3.8.2.2.1.2.3.4.12345 = ""

字符串
Regex:

1\.2\.3\.4\.(\d+) = WORDS: (?|"([^"]*)|([^:]*))


https://regex101.com/r/kQ3wT5/10-匹配
https://regex101.com/r/kQ3wT5/9-不匹配
这个正则表达式只匹配第一个字符串,而不匹配第二个字符串,因为第二个字符串是空的。所以正则表达式必须在两种情况下都匹配。还有一件事我真的不想用“全球”匹配。

s3fp2yjn

s3fp2yjn1#

您需要将WORDS:<space>设置为可选的,方法是用一个 optional non-capturing group将其封装起来:

1\.2\.3\.4\.(\d+) = (?:WORDS: )?(?|"([^"]*)|([^:]*))

字符串
参见regex demo
(?:WORDS: )?匹配WORDS:子串的1或0个序列(由于?量词),后跟一个空格。

相关问题