正则表达式排除子字符串

Regex to exclude substring

我想编写正则表达式:

  1. 传递以 /scripts/my_app/ 开头的字符串(/scripts/my_app/xxxx.sh/scripts/my_app/yyyyy/xxxz.sh
  2. 排除以 /scripts/ 开头的其他字符串(/scripts/another_string/xxxx.sh/scripts/some_string/yyyyy/xxxz.sh
  3. 传递任何其他字符串,例如 /xxxx/yyyy/zzzzz/qqqq.sh/aaaa/bbbb/ccc.sh

像这样的东西 ^[(\/scripts\/my_app\/)|(?!\/scripts\/)].* 不起作用。

您可以使用

^/(?:scripts/my_app/|(?!scripts/)).*

说明

  • ^/ 字符串开始并匹配 /
  • (?:非捕获组
    • scripts/my_app/字面匹配
    • |
    • (?!scripts/) 否定前瞻,断言不是 scripts/
  • )关闭非捕获组
  • .* 匹配任意字符 0+ 次

Regex demo

另一种选择是使用双重否定先行

^/(?!scripts/(?!my_app/)).*

Regex demo