带有if / else条件的正则表达式正向搜索

时间:2018-08-06 14:35:27

标签: regex pcre

我正在尝试编写一个正则表达式,以检查某个模式是否存在,如果存在,则匹配其后的所有内容,如果(且仅当)不存在,则匹配另一个模式后的所有内容。

示例行:

http://example.com/contact
www.example.com/contact
http://www.example.com/contact

在所有3种情况下的预期输出:example

这是我期望做的正则表达式:

(?(?<=www\.).+|(?<=http:\/\/).+)(?=\.com)

我以为是

  1. 检查是否为“ www”。被发现
  2. 如果是,则将匹配其后的所有内容
  3. 如果不是,请匹配“ http://”之后的所有内容
  4. 将匹配范围限制为出现“ .com”之前的所有内容

对于前两行,该表达式运行良好,但是在第三行中,www.example被匹配,而不仅仅是example。这是否表示尽管满足else条件,但仍出于某种原因执行了if命令?

如何更改上面的表达式,使得只有在找不到http//部分的情况下,www.才会向前看?

1 个答案:

答案 0 :(得分:1)

将我的评论转换为答案。

您可以使用此正则表达式:

Unknown field(s) (birthday) specified for User

RegEx Demo

RegEx说明:

  • ^(?:https?://(?:www\.)?|www\.)\K\S+?(?=\.com(?:/|$)) :开始
  • ^:匹配(?:https?://(?:www\.)?|www\.)http://www.或(http://
  • https:重置匹配的信息
  • \K:匹配1个以上非空格字符(惰性)
  • \S+?:使用前瞻断言我们有(?=\.com(?:/|$))或行首结束