用于匹配包含子字符串但不应后跟特定子字符串的行的正则表达式

Regular expression to match lines that contain a sub string but should not be followed by specific sub string

在我的例子中,我有多个网址,我需要匹配一些既不包含 abc 也不包含 xyz 的网址。例如给定的网址如下-

- secure/api/abc/sometext
- secure/api/xyz/sometext
- secure/api/required/sometext
- unsecure/api/sometext/sometext

预期结果

网址必须以 secure/api/

开头

我想这可以解决你的问题

^secure\/api\/(?!.*(abc|xyz|\/{2,})).+\/sometext$

Explanation

^secure - 它匹配字符串开头的单词 secure。

\/ - 它匹配文字字符 /.

(?!.*(abc|xyz|\/{2,})).+ - 这里 ?! 表示负前瞻。

  -This complete sentence means match any thing except word abc and xyz and '//'.

$ - 这表示字符串结束。

这是我认为性能更好的另一个版本

^secure\/api\/(?:(?!.*(abc|xyz|\/{2,})).+)\/sometext$

Details -

?: 将创建一个非捕获组,这将有助于提高性能

P.S - 在这里发布任何问题之前我认为你应该阅读行为准则并做一些功课或者显示有关指定输入和所需输出以及边缘情况的一些有效示例。