正则表达式匹配 URL 除了一些使用 Look Ahead 的网站
Regex to match URL except for some websites using Look Ahead
我正在尝试创建一个正则表达式来过滤掉 url 某些网站除外。
(?!(.*mysite))((www|http|.*com).*)
https://regex101.com/r/Su5zlB/9
我很难排除某些网站。我试过向前看,但它似乎不起作用。我希望它的行为类似于 AND 操作,因此如果第一个条件为假,它不应继续到下一个条件。有任何想法吗?
如果您只想要求 URL 在其中包含 http
、www
和 com
,但主机部分不包含 mysite
, 那么你可以使用
preg_match('~^https?://(?:[^./]+\.)*(?!mysite)[^./]+\.com(?:/.*)?$~', $url)
详情:
^
- 字符串开头
https?://
- http://
或 https://
(?:[^./]+\.)*
- 零个或多个序列:
[^./]+
- .
和 /
以外的 1+ 个字符
\.
- 文字点
(?!mysite)[^./]+
- 除 .
和 /
之外的 1+ 个字符 - 最多 .com
- 不等于 mysite
\.com
- .com
字符串
(?:/.*)?
- 1 或 0 个序列
/
- 斜线
.*
- 除换行符以外的任何 0+ 个字符
$
- 字符串结尾。
我正在尝试创建一个正则表达式来过滤掉 url 某些网站除外。
(?!(.*mysite))((www|http|.*com).*)
https://regex101.com/r/Su5zlB/9
我很难排除某些网站。我试过向前看,但它似乎不起作用。我希望它的行为类似于 AND 操作,因此如果第一个条件为假,它不应继续到下一个条件。有任何想法吗?
如果您只想要求 URL 在其中包含 http
、www
和 com
,但主机部分不包含 mysite
, 那么你可以使用
preg_match('~^https?://(?:[^./]+\.)*(?!mysite)[^./]+\.com(?:/.*)?$~', $url)
详情:
^
- 字符串开头https?://
-http://
或https://
(?:[^./]+\.)*
- 零个或多个序列:[^./]+
-.
和/
以外的 1+ 个字符
\.
- 文字点
(?!mysite)[^./]+
- 除.
和/
之外的 1+ 个字符 - 最多.com
- 不等于mysite
\.com
-.com
字符串(?:/.*)?
- 1 或 0 个序列/
- 斜线.*
- 除换行符以外的任何 0+ 个字符
$
- 字符串结尾。