具有 if/else 条件的正则表达式正前瞻
regex positive lookahead with if/else condition
我正在尝试编写一个正则表达式来检查模式是否存在,如果存在,则匹配其后的所有内容,如果(且仅当)不存在,则匹配另一个模式之后的所有内容。
示例行:
http://example.com/contact
www.example.com/contact
http://www.example.com/contact
所有 3 种情况下的预期输出:example
这是我期望的正则表达式:
(?(?<=www\.).+|(?<=http:\/\/).+)(?=\.com)
我假设会:
- 检查是否可以找到 "www."
- 如果是,将匹配其后的所有内容
- 如果不是,则匹配 "http://"
之后的所有内容
- 将匹配限制为出现“.com”之前的所有内容
对于前两行,表达式运行良好,但在第三行匹配 www.example
而不仅仅是 example
。这是否意味着尽管满足 if
条件,但由于某种原因执行了 else
命令?
如何更改上面的表达式,使其仅在未找到 www.
部分时才进行 http//
前瞻?
正在将我的评论转换为答案。
您可以使用这个正则表达式:
^(?:https?://(?:www\.)?|www\.)\K\S+?(?=\.com(?:/|$))
正则表达式说明:
^
: 开始
(?:https?://(?:www\.)?|www\.)
:匹配http://www.
或http://
或(https
)
\K
: 重置匹配信息
\S+?
:匹配1+个非space字符(懒)
(?=\.com(?:/|$))
:使用前瞻断言我们有 .com
或前面的行尾
我正在尝试编写一个正则表达式来检查模式是否存在,如果存在,则匹配其后的所有内容,如果(且仅当)不存在,则匹配另一个模式之后的所有内容。
示例行:
http://example.com/contact
www.example.com/contact
http://www.example.com/contact
所有 3 种情况下的预期输出:example
这是我期望的正则表达式:
(?(?<=www\.).+|(?<=http:\/\/).+)(?=\.com)
我假设会:
- 检查是否可以找到 "www."
- 如果是,将匹配其后的所有内容
- 如果不是,则匹配 "http://" 之后的所有内容
- 将匹配限制为出现“.com”之前的所有内容
对于前两行,表达式运行良好,但在第三行匹配 www.example
而不仅仅是 example
。这是否意味着尽管满足 if
条件,但由于某种原因执行了 else
命令?
如何更改上面的表达式,使其仅在未找到 www.
部分时才进行 http//
前瞻?
正在将我的评论转换为答案。
您可以使用这个正则表达式:
^(?:https?://(?:www\.)?|www\.)\K\S+?(?=\.com(?:/|$))
正则表达式说明:
^
: 开始(?:https?://(?:www\.)?|www\.)
:匹配http://www.
或http://
或(https
)\K
: 重置匹配信息\S+?
:匹配1+个非space字符(懒)(?=\.com(?:/|$))
:使用前瞻断言我们有.com
或前面的行尾