php Perl匹配字符串也包含点

b1uwtaje  于 2023-09-29  发布在  PHP
关注(0)|答案(2)|浏览(118)

我需要匹配一个包含dot(.)但没有dot的字符串。
以下是示例模式:

res:shanghai:45610
res:chicago.usa:57450

我使用的正则表达式:

res:[\w]{4,15}:[1-9][0-9]*

它只匹配res:shanghai:45610,但应该同时匹配两者。
由于第二个图案在chicago.usa之间包含一个点(.),因此它不匹配。
如何修改正则表达式以匹配res:chicago.usa:57450。具体来说,它应该允许单词字符中间有一个点,同时仍然限制字段的长度为最小4个字符,最大15个字符(包括点)。
Above test case on regex101

ca1c2owp

ca1c2owp1#

只需将点添加到字符类:

res:[.\w]{4,15}:[1-9][0-9]*

但它也会匹配所有点的字符串。

res:....:1
mec1mxoz

mec1mxoz2#

基本上,你希望中间的部分与两者都匹配

[\w.]{4,15}

\w+(?:\.\w+)?

Lookahead可用于执行“AND”操作。

res:(?=[\w.]{4,15}:)\w+(?:\.\w+)?:[1-9][0-9]*

另一种可能性是在正则表达式之外进行长度检查。

相关问题