我想匹配Internet.或Internet在字符串的末尾。
我可以写:
$str =~ m/Internet\.|Internet$/
Run Code Online (Sandbox Code Playgroud)
有regex没有不重复的写法Internet?
您可以使用括号将事物组合在一起,管道在组内本地工作。
这意味着,你可以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)你会得到两种b或c在$1。
2:我删除了m因为它是模式匹配的默认模式。
旁注:正如下面评论者 JvdV 所提到的,根据您的用例,您还可以考虑在单词之前添加单词边界Internet。然后,它只会匹配类似The Internet.or(Internet.)但不匹配的东西IIIIInternet.。您可以使用\b,例如/\bInternet(\.|$)/