我正在尝试在一组文本中识别urls。但是,我希望能够识别格式松散的urls,例如:
example.com
www.example.com
我不太擅长正则表达式:(
我在下面找到了patter,但不幸的是它需要方案。
/(([[:alnum:]]+:\/\/)|www\.)([^[:space:]]*)([[:alnum:]#?\/&=])/i是否可以匹配包含.com、.net或.org等的整个字符串(没有空格)?
谢谢
发布于 2010-10-14 22:55:07
要仅匹配不包含空格且以".com“、".net”或“.org”结尾的任何字符串:
/[^\s]+\.(?:com|net|org)\b/i解释:
/ =常规Expression[^\s]的开始character+ =非(^)一个空格(\s) characters)\. =一个或多个前面的集合(非空格Not =一个点。大小写中的点是特殊字符otherwise(?: ... ) =A组,但不是storedcom|net|org = RegExps或net或org的特殊字符(您可以在此处添加更多字符,用"|")\b =A单词边界分隔- word/的结尾=正则表达式的结尾(可选的flags)i =对大小写不敏感除外
Answer的扩展
在OP的请求下,下面是一个(粗略的) RegExp,它应该匹配以指定字符串结尾的域的URL,并与查询字符串中的一个或多个key=value对相匹配。
/[^\s]+\.(?:com|net|org)[^\s]+\?[^\s]+=[^\s]+(?:\&?[^\s]+=[^\s]+)*\b/i/ =常规Expression[^\s]+\.(?:com|net|org)的开始= As before[^\?]+ =一个或多个非问号字符(可以是任何文件夹或文件名)。同样,问号前面有一个将其视为普通字符的符号,否则,它具有特殊含义here\? =A Questionmark[^\s]+\=[^\s]+ =一个或多个非空格,然后是等号,然后是一个或多个non-whitespaces(?:\&?[^\s]+=[^\s]+)* =无或多组与符号\,然后是另一个或多个非空格、等号,和一个或多个non-whitespaces\b = End of the string/ = End of the Regular Expressioni =不区分大小写注意:此选项不会查找完全有效的URL,也不支持多种国家/地区代码(如澳大利亚的“.com.au”)或其他顶级域名(如“.edu”等)。但是,它将匹配twitter.com/ example ?var=true提供的示例字符串
发布于 2010-10-14 22:46:38
假阳性的风险是存在的,但很小。所以你确实可以使用类似这样的东西:
/\b(([-\w]{2,}\.)+(com|net|org|info)|www(\.\w{3,})+\.\w{2,6})\b/i前半部分用于普通的.com/.net域名,后半部分与www匹配所有内容。前缀。如果除了完整的http:// urls之外还想检测这些域名,那就更难了。
发布于 2010-10-14 22:48:32
~(?:https?://)?(?:[-\w]+\.)+[a-z]{2,6}[^\s]*~https://stackoverflow.com/questions/3934170
复制相似问题