正则表达式问题,捕获直到找到 space 或 endline
Regex trouble, capture until find space or endline
我正在尝试捕获以下匹配项:
"url: https://www.anysite/anything"
但有时字符串会出现:
"url: https://www.anysite/anything another word"
但我只想匹配
"url: https://www.anysite/anything"
是否"another word"来了。
所以,我的逻辑是捕获,直到找到 url 地址之后的第一个 space,或者字符串的结尾。
我在 PHP 中的正则表达式是:
preg_match("/(Url|url)(\:|\b)(\s\b|\b).+(\s|$)/",$linestring,$url_string);
但它总是会带来 "another word",而不是只带来 space。
.
是贪婪的,除非使用 ?
或 U
修改量词变得不贪婪。
(Url|url)(\:|\b)(\s\b|\b).+?(\s|$)
您实际上可以进一步简化它:
[Uu]rl(?::|\b)\s?\b.+?(?:\s|$)
如果你想要 URL 位用 ()
捕获 .+?
。
[Uu]rl(?::|\b)\s?\b(.+?)(?:\s|$)
捕获第一个 space 之前的一种方法是使用 \S+
,它匹配一个或多个非 space 字符的任意序列:
url:?\s*(\S+)
通过使用 i
标志,我们可以避免必须测试 Url
或 url
或 URL
等。我们可以使用 preg_replace
来简化用法,仅用捕获的组替换字符串:
$url = preg_replace('/url:?\s*(\S+).*/i', '', $string);
例如
$strings = array("url: https://www.anysite/anything",
"url: https://www.anysite/anything another word");
foreach ($strings as $string) {
$url = preg_replace('/url:?\s*(\S+).*/i', '', $string);
echo "$url\n";
}
输出:
https://www.anysite/anything
https://www.anysite/anything
我正在尝试捕获以下匹配项:
"url: https://www.anysite/anything"
但有时字符串会出现:
"url: https://www.anysite/anything another word"
但我只想匹配
"url: https://www.anysite/anything"
是否"another word"来了。
所以,我的逻辑是捕获,直到找到 url 地址之后的第一个 space,或者字符串的结尾。 我在 PHP 中的正则表达式是:
preg_match("/(Url|url)(\:|\b)(\s\b|\b).+(\s|$)/",$linestring,$url_string);
但它总是会带来 "another word",而不是只带来 space。
.
是贪婪的,除非使用 ?
或 U
修改量词变得不贪婪。
(Url|url)(\:|\b)(\s\b|\b).+?(\s|$)
您实际上可以进一步简化它:
[Uu]rl(?::|\b)\s?\b.+?(?:\s|$)
如果你想要 URL 位用 ()
捕获 .+?
。
[Uu]rl(?::|\b)\s?\b(.+?)(?:\s|$)
捕获第一个 space 之前的一种方法是使用 \S+
,它匹配一个或多个非 space 字符的任意序列:
url:?\s*(\S+)
通过使用 i
标志,我们可以避免必须测试 Url
或 url
或 URL
等。我们可以使用 preg_replace
来简化用法,仅用捕获的组替换字符串:
$url = preg_replace('/url:?\s*(\S+).*/i', '', $string);
例如
$strings = array("url: https://www.anysite/anything",
"url: https://www.anysite/anything another word");
foreach ($strings as $string) {
$url = preg_replace('/url:?\s*(\S+).*/i', '', $string);
echo "$url\n";
}
输出:
https://www.anysite/anything
https://www.anysite/anything