Regex匹配字符串,直到第一次出现小数点后跟一个制表符



我正在寻找一个正则表达式来实现以下功能:从列表中,我只想要所有在第一次出现小数点后有制表符的字符串。这些字符串只能位于每行的开头。使用我当前的正则表达式/^(S+.)/gm,我甚至得到了具有2个或更多小数点的字符串。

以下是一些示例代码(空格实际上是选项卡(:

aaa.            86400
ns1.dns.nic.aaa.    172800  IN  A   156.154.144.2
ns1.dns.nic.aaa.    172800  IN  AAAA    2610:a1:1071:0:0:0:0:2
abarth.         86400   IN  RRSIG   NSEC 8 1 86400 20180728050000 20180715040000 41656 . 
a0.nic.abarth.      172800  IN  A   65.22.24.17
a0.nic.abarth.      172800  IN  AAAA    2a01:8840:1a:0:0:0:0:17
ai.
ns2.offshore.ai.    172800  IN  A   108.166.113.245
whois.ai.       172800  IN  A   209.59.119.1
xn--node.ns.anycast.pch.net.    172800  IN  A   204.61.216.88
d.nic.xn--mxtq1m.   172800  IN  AAAA    2001:c50:ffff:1:0:0:0:185
d.nic.
xn--ngbc5azd.       172800  IN  NS  a.nic.xn--ngbc5azd.

我需要的是aaa.abarth.ai.xn--ngbc5azd.,而不是a0.nic.abarth.whois.ai或任何其他小数点超过1的字符串。

谢谢!

您可以使用

'~^[^.rn]+.(?=t)~m'

请参阅regex演示注意:如果将行作为单独的字符串传递,则不需要rnm修饰符(。

详细信息

  • ^-行首(因为m修饰符使^与行首位置匹配(
  • [^.rn]+-1+除.、LF和CR之外的字符
  • .-一个点
  • (?=t)-.后面必须有一个选项卡

PHP演示:

if (preg_match_all('~^[^.rn]+.(?=t)~m', $str, $m)) {
print_r($m[0]);
}

输出:

Array
(
[0] => aaa.
[1] => abarth.
[2] => ai.
[3] => xn--ngbc5azd.
)

延迟回答,但您也可以使用:

preg_match_all( '/^([^.]+.)t/m', $x, $m, PREG_PATTERN_ORDER );
print_r( $m[1] );
Array
(
[0] => aaa.
[1] => abarth.
[2] => ai.
[3] => xn--ngbc5azd.
)

Regex101
Ideone

相关内容

最新更新