我正在尝试捕获以下匹配项:“网址: 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/
忽然笑
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
- 2 回答
- 0 关注
- 104 浏览
添加回答
举报
0/150
提交
取消