如何在没有点的情况下获得nserver的值?
它尝试了这个正则表达式,但我无法摆脱最后一个点。
nserver:(\s*)(?<Value>(\S*))
这是我搜索的数据
% By submitting a query to RIPN's Whois Service
% you agree to abide by the following terms of use:
% http://www.ripn.net/about/servpol.html#3.2 (in Russian)
% http://www.ripn.net/about/en/servpol.html#3.2 (in English).
domain: WEBMONEY.RU
nserver: ns.molot.ru.
nserver: ns.relsoftcom.ru.
nserver: ns.relsoft.ru.
state: REGISTERED, DELEGATED, VERIFIED
org: "Computing Forces" CJSC
registrar: RU-CENTER-REG-RIPN
admin-contact: https://www.nic.ru/whois
created: 1998.04.24
paid-till: 2014.05.01
free-date: 2014.06.01
source: TCI
Last updated on 2014.02.02 00:06:43 MSK
我想要这个结果
ns.molot.ru
我正在使用这些选项
RegexOptions options = RegexOptions.IgnoreCase | RegexOptions.Singleline;
答案 0 :(得分:1)
嗯,这不是你的正则表达式:
(?<=nserver:)(\s*)(?<Value>.*(?=.\r\n))
? (换行/换行前的回车)
你也许可以逃避点,然后把贪婪的.*
变成懒惰的.*?
,但是没有前瞻的简单方法可能是:
(?<=nserver:)\s*(?<Value>\S+)\.
由于评论而添加的说明:
这是\s*
完成匹配,\S+
开始匹配的地方:
ns.molot.ru。
由于\S+
匹配除空格以外的所有字符以及以下\r
\n
\t
\f
,因此它会匹配这些(加粗)并停止换行前:
ns.molot.ru。的
之后,正则表达式为\.
,因此它会尝试匹配一个句点,但没有剩余时间可供匹配。 \S+
然后回溯(从匹配中放弃一个字符)然后重试:
ns.molot.ru
现在,在放弃匹配的最后一个字符后,正则表达式尝试再次匹配\.
并成功。
但如果您在\.
之前\S+
,则正则表达式将尝试匹配该期间,当它仍在此处时(步骤1):
ns.molot.ru。
但是因为那里有n
,所以它不会匹配,整个正则表达式就会停在那里。
答案 1 :(得分:0)
快速方法,将您的模式更改为:
(?<=nserver:\s*)(?<Value>.*)(?=\.\r?\n)
您必须删除模式选项单行。