有没有办法在不重复某些部分的情况下编写`regex`?

Eug*_*kov 1 regex perl

我想匹配Internet.Internet在字符串的末尾。

我可以写:

$str =~ m/Internet\.|Internet$/
Run Code Online (Sandbox Code Playgroud)

regex没有不重复的写法Internet

Che*_*yDT 7

您可以使用括号将事物组合在一起,管道在组内本地工作。

这意味着,你可以ab|ac变成a(b|c). 请注意,这也会自动创建一个捕获组1;如果你不想这样,你可以使用a(?:b|c).

所以,在你的情况下,你可以写2

$str =~ /Internet(\.|$)/
Run Code Online (Sandbox Code Playgroud)

(或者/Internet(?:\.|$)/使用非捕获组,但在这里似乎无关紧要。)


1:这意味着匹配组的内容会进入$1(或$2等取决于如何,许多个组,它是),所以用a(b|c)你会得到两种bc$1

2:我删除了m因为它是模式匹配的默认模式。

旁注:正如下面评论者 JvdV 所提到的,根据您的用例,您还可以考虑在单词之前添加单词边界Internet。然后,它只会匹配类似The Internet.or(Internet.)但不匹配的东西IIIIInternet.。您可以使用\b,例如/\bInternet(\.|$)/