为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
慕尼黑的夜晚无繁华 2022-09-17 17:57:46
我正在尝试捕获以下匹配项:“网址: 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);但它也总是带来“另一个词”,而不是只带来空间。
查看完整描述

2 回答

?
HUWWW

TA贡献1874条经验 获得超12个赞

是贪婪的,除非量词与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/


查看完整回答
反对 回复 2022-09-17
?
忽然笑

TA贡献1806条经验 获得超5个赞

捕获直到第一个空格的一种方法是使用 ,它与一个或多个非空格字符的任何序列匹配:\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/anything

https://www.anysite/anything

3v4l.org 演示


查看完整回答
反对 回复 2022-09-17
  • 2 回答
  • 0 关注
  • 104 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信