正则表达式问题

下面的表达式中:\b(\S+)://([^:]+)(?::(\S+))?\b对应匹配的字符串http://192.168.1.1:3210其中第一部分\b(\S+)://... 下面的表达式中:
\b(\S+)://([^:]+)(?::(\S+))?\b 对应匹配的字符串 http://192.168.1.1:3210

其中 第一部分\b(\S+)://我明白,匹配了http://
但是([^:]+)和(?::(\S+))?\b我不是很明白 ^表示文本第一个字符,但是不可能是字符:啊还多个+
第二个更不明白了 ?要在某个字符之后,他却放在最前面,很不理解,求大神指点
展开
 我来答
shelher
2013-09-22 · TA获得超过6134个赞
知道大有可为答主
回答量:3609
采纳率:100%
帮助的人:6262万
展开全部
\b的意思与表示匹配单词的开头与结尾 是 \<与\>的简写
(\S+):// 这一部分你的理解没错

([^:]+) 匹配的是除:之外的所有字符 用于匹配 192.168.1.1 也就是IP地址了

(?::(\S+))?\b 其中(?: ......) 该结构表示只匹配.......部分内容,不对内容进行捕获,也不分组

分解看就是(?::(\S+))表示匹配:3210 最后加个?表示 这一部分可有可无,因为这一部分匹配的文本是端口地址

最后的\b与前面的\b一起限定 整个地址是完整的(类似与一个单词的完整性)
丶没好名字
2013-09-22 · TA获得超过143个赞
知道小有建树答主
回答量:374
采纳率:0%
帮助的人:231万
展开全部
(?:pattern )
匹配 pattern 但不捕获该匹配的子表达式,即它是一个非捕获匹配,不存储供以后使用的匹配。这对于用“or”字符 (|) 组合模式部件的情况很有用。例如,'industr(?:y|ies) 是比 'industry|industries' 更经济的表达式。
[^xyz]
反向字符集。匹配未包含的任何字符。例如,“[^abc]”匹配“plain”中的“p”。

感觉这个表达式写得不严谨.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
在格雅
2013-09-22 · 超过21用户采纳过TA的回答
知道答主
回答量:41
采纳率:0%
帮助的人:51.5万
展开全部
我给你写个吧,你现在这个会存在匹配错误的情况。
\b(http|ftp|https)://([a-zA-Z\d\.]+)(?:\:(\d+)){0,1}\b
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式