我正在尝试创建一个正则表达式,以便我可以识别文本中的URL。
可能的(可能的)测试用例:
- 的 http://a.url.com
- 的 http://a.url.co.uk
- [http://a.url.com]
- [http://a.url.co.uk]
- [http://a.url.com]
- [http://a.url.co.uk]
- [http://a.url.com]
- [http://a.url.co.uk]
- [http://a.url.com]
- [http://a.url.co.uk]
- 文字 http://a.url.com ,此处
- 文字 http://a.url.co.uk 此处
- 文字[http://a.url.com]和此处
- 文字[http://a.url.co.uk]和
这里
- 文字[http://a.url.com]和
这里
- 文字[http://a.url.co.uk]和
这里
- 文字[http://a.url.com]和
这里
- 文字[http://a.url.co.uk]和
这里
- 文字[http://a.url.com]和
这里
- 文字[http://a.url.co.uk]和
这里
只有没有方括号的行才能匹配。并且只应匹配URL,而不是整行。如果不清楚上面列表中的粗体文本是我希望匹配的正则表达式。
我目前正在研究的正则表达式是:
(^|[^\[ ])(https?://\S+)
只有前两行匹配,我无法弄清楚如何使其他行没有方括号匹配?
我使用过群组,因为稍后我会用一些HTML替换匹配。但需要首先让正则表达式正常工作。
我一直在使用这个在线工具来帮助我构建和测试正则表达式; http://gskinner.com/RegExr/
3 个答案:
答案 0 :(得分:1)
您还可以使用负前瞻断言来确保该行不使用正则表达式包含方括号:
^(?!.*\[.*\]).*(https?://\S+)
Rubular link
答案 1 :(得分:0)
这应该有效:
(?<=^[^\[\]]*)(https?://\S+)(?=[^\[\]]*$)
使用[^\[\]]*
,您说在链接之前和之后可能有除方括号之外的任何符号。
这使用正向前瞻和后视来检查没有括号。
答案 2 :(得分:0)
您修改的工作正则表达式:
([^\S\]](https?:\/\/[^\]\s]+)[^\S\]]|^(https?:\/\/[^\]\s]+)$)
Rubular