正则表达式,字符串不以特定符号结尾

时间:2013-09-15 14:41:03

标签: regex

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

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

问题是它还匹配 http:// ex.ample& quot; 等网址。我只需要 http:// ex.ample 部分。

所以我需要以这样的方式更新正则表达式,即网址不能以下列字符结尾:

."()'<>;

并且不使用以下字符序列之一:

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

我坚持了2天。谢谢!

1 个答案:

答案 0 :(得分:1)

似乎以下就足够了:

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

由于;已被禁止作为最后一个字符,因此您提及的所有实体也将被排除。请参阅rubular.com

<强>说明:

(?<![."()'<>;])检查在当前位置之前是否无法匹配任何字符."()'<>;(由于$ {{3},因此可以保证字符串结束}。

如果您碰巧遇到JavaScript(不支持anchor),请使用

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

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