正则表达式故障,捕获直到找到空间或结束线

我正在尝试捕获以下匹配项:

“网址: https://www.anysite/anything"

但有时字符串会出现:

“网址:https://www.anysite/anything 另一个词”

但我只想匹配

“网址: https://www.anysite/anything"

无论“另一个词”是否出现。

因此,我的逻辑是捕获,直到找到url地址或字符串末尾后的第一个空格。我在 PHP 中的正则表达式是:

preg_match("/(Url|url)(\:|\b)(\s\b|\b).+(\s|$)/",$linestring,$url_string);

但它也总是带来“另一个词”,而不是只带来空间。


慕尼黑的夜晚无繁华
浏览 106回答 2
2回答

HUWWW

是贪婪的,除非量词与a或修改的不相关。.?U(Url|url)(\:|\b)(\s\b|\b).+?(\s|$)您实际上可以进一步简化它:[Uu]rl(?::|\b)\s?\b.+?(?:\s|$)如果希望 URL 位捕获 带有 ..+?()[Uu]rl(?::|\b)\s?\b(.+?)(?:\s|$)https://regex101.com/r/urq2fM/2/

忽然笑

捕获直到第一个空格的一种方法是使用 ,它与一个或多个非空格字符的任何序列匹配:\S+url:?\s*(\S+)通过使用标志,我们可以避免测试或或等。我们可以使用它来简化用法,仅将字符串替换为捕获的组:iUrlurlURLpreg_replace$url = preg_replace('/url:?\s*(\S+).*/i', '$1', $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', '$1', $string);    echo "$url\n";}输出:https://www.anysite/anythinghttps://www.anysite/anything3v4l.org 演示
打开App,查看更多内容
随时随地看视频慕课网APP