我正在尝试编写一个正则表达式,以检查某个模式是否存在,如果存在,则匹配其后的所有内容,如果(且仅当)不存在,则匹配另一个模式后的所有内容。
示例行:
http://example.com/contact
www.example.com/contact
http://www.example.com/contact
在所有3种情况下的预期输出:example
这是我期望做的正则表达式:
(?(?<=www\.).+|(?<=http:\/\/).+)(?=\.com)
我以为是
对于前两行,该表达式运行良好,但是在第三行中,www.example
被匹配,而不仅仅是example
。这是否表示尽管满足else
条件,但仍出于某种原因执行了if
命令?
如何更改上面的表达式,使得只有在找不到http//
部分的情况下,www.
才会向前看?
答案 0 :(得分:1)
将我的评论转换为答案。
您可以使用此正则表达式:
Unknown field(s) (birthday) specified for User
RegEx说明:
^(?:https?://(?:www\.)?|www\.)\K\S+?(?=\.com(?:/|$))
:开始^
:匹配(?:https?://(?:www\.)?|www\.)
或http://www.
或(http://
)https
:重置匹配的信息\K
:匹配1个以上非空格字符(惰性)\S+?
:使用前瞻断言我们有(?=\.com(?:/|$))
或行首结束