所以基本上我正在做的是:我有一些文字,我需要从中获取网址。这是我正在使用的正确的正则表达式:
http(s)?://([\w-]+\.[\w-]+)([/\.[\w-]+])*([a-zA-Z0-9\~\!\@\#\$\%\^\&\*\(\)_\-\=\+\\\/\?\.\:\;\'\,]*)?
问题是它还匹配 http:// ex.ample& quot; 等网址。我只需要 http:// ex.ample 部分。
所以我需要以这样的方式更新正则表达式,即网址不能以下列字符结尾:
."()'<>;
并且不使用以下字符序列之一:
"
'
>
<
我坚持了2天。谢谢!
答案 0 :(得分:1)
似乎以下就足够了:
^.*(?<![."()'<>;])$
由于;
已被禁止作为最后一个字符,因此您提及的所有实体也将被排除。请参阅rubular.com。
<强>说明:强>
(?<![."()'<>;])
检查在当前位置之前是否无法匹配任何字符."()'<>;
(由于$
{{3},因此可以保证字符串结束}。
如果您碰巧遇到JavaScript(不支持anchor),请使用
^(?:.*[^."()'<>;])?$
这匹配空字符串或1个或多个字符的字符串,其中最后一个不是."()'<>;
之一;我正在使用否定的lookbehind assertions来确保这一点。