-1

所以基本上我正在做的是:我有一些文本,我需要从中获取 url。这是我正在使用的确切正则表达式:

http(s)?://([\w-]+\.[\w-]+)([/\.[\w-]+])*([a-zA-Z0-9\~\!\@\#\$\%\^\&\*\(\)_\-\=\+\\\/\?\.\:\;\'\,]*)?

问题是它也匹配诸如http://ex.ample"之类的 URL。等等。我只需要http://ex.ample部分。

所以我需要更新正则表达式,使 url 不能以以下字符结尾:

."()'<>;

AND 不包含以下字符序列之一:

&quot;
&#39;
&nbsp;
&gt;
&lt;

我坚持了2天。谢谢!

4

1 回答 1

1

似乎以下内容就足够了:

^.*(?<![."()'<>;])$

由于 a;已经被禁止作为最后一个字符,因此您提到的所有实体也将被排除在外。在rubular.com上查看。

解释:

(?<![."()'<>;])检查是否不可能匹配."()'<>;当前位置之前的任何字符(这保证是字符串的结尾,这要归功于$ anchor

如果您碰巧遇到了 JavaScript(它不支持后向断言),请使用

^(?:.*[^."()'<>;])?$

这匹配空字符串或 1 个或多个字符的字符串,其中最后一个不是."()'<>;; 我正在使用否定字符类来确保这一点。

于 2013-09-15T14:44:57.970 回答