我想创建一个正则表达式来匹配以http://,https://,//开头的网址,或者找到扩展名与html,htm,php和php3不同的网址。 URL查询子字符串是可选的
让我们说我想找到这些:
http://example.com
/example.mp3
/example.mp3?q=example
http://example.com/example.mp3
#example
拒绝这些:
example
/example
/example/
/example.htm
/example.htm?q=example
/example.mp3/example //The .mp3 needs to be extension to be accepted
/example#example
我已经尝试了这个/(^(http:\/\/|https:\/\/|\/\/|#)|(.*)((.*)\.^(?!html|htm|php|php3)$)(\?.*)?$)/igm
,但它没有用。
如果相反(反转已接受和拒绝的列表)更容易做,即使非常感谢,我可以更改处理正则表达式的函数。
答案 0 :(得分:1)
好像你可以使用
^(?:#.+|(?:https?:/)?/[^?#\n]*\.(?!(?:html?|php3?)\b)\w+(?:\?.*)?)$
请参阅regex demo
模式详情:
^
- 字符串开头(?:#.+
- #
后跟任何1 +字符|
- 或(?:https?:/)?/[^?#\n]*\.(?!html?|php3?)\w+(?:\?.*)?)
-
(?:https?:/)?/
- 可选http:/
或https:/
然后/
[^?#]*
- 除?
和#
\.
- 一个点(?!(?:html?|php3?)\b)\w+
- 1个或多个字母/数字/下划线不等于htm
,html
,php
或php3
(?:\?.*)?)
- 可选的?
后跟任意0+字符$
- 字符串结尾