regex - 使用负前瞻根本不会导致匹配
问题描述
例如,我有一个^\/pref1\/pref2\/v.+\/(search)(\/.*)?$
匹配的正则表达式/pref1/pref2/v1/search/suf1/suf2
。
但我希望它匹配那个地方不包含单词search
的任何东西。为了实现这一点,我通过添加负前瞻来修改正则表达式:
^\/pref1\/pref2\/v.+\/(?!search)(\/.*)?$
但是例如这不匹配:
/pref1/pref2/v1/somethingElse/suf1/suf2
但它应该somethingElse
不等于search
。如何解决?
解决方案
您可以使用
^\/pref1\/pref2\/v[^\/]+\/(?!search(?:\/|$))[^\/]+(\/.*)?$
请参阅正则表达式演示。
详情:
^
- 字符串的开始\/pref1\/pref2\/v
- 一个/pref1/pref2/v
字符串[^\/]+
- 一个或多个字符/
\/
- 一个/
字符(?!search(?:\/|$))
search
- 紧靠右边,后面不能有字符串/
或字符串结尾[^\/]+
- 一个或多个字符/
(\/.*)?
- 一个可选的捕获组,匹配一个/
字符,然后匹配除换行符之外的任何零个或多个字符,尽可能多$
- 字符串结束。
推荐阅读
- arrays - 如何在prolog中访问二维数组以及如何循环其中的每个元素
- ignite - Apache Ignite Cache - 从值中获取密钥
- reactjs - 测试悬念时不支持错误
- java - 或多或少条件始终有效
- c# - 如何通过字节数组区分对象类型
- ios - 循环通过快照 .values 是随机的吗?
- python - 函数表示没有为河内塔迭代函数定义(使用堆栈)
- php - 在 WooCommerce 中用 POA 替换 $0 或空白价格
- php - 如何将 laravel 项目指向共享主机中 public_html 下的公用文件夹
- python - 无法使用 OOP 运行 Python UDP 服务器