【发布时间】:2026-01-16 23:20:06
【问题描述】:
我正在学习正则表达式的高级用法,并注意到许多帖子在其中使用 (*SKIP) 或 (*F)。
我发布了一个问题,其想法是匹配没有yellow 但只有brown 存在于蓝色之后才具有blue 的行。正确答案是:
.*yellow.*(*SKIP)(*F)|^.*\bblue\b(?=.*brown).*$
我也尝试过像下面这样的环视表达式,但并非适用于所有情况:
^((?!yellow).)*blue(?=.*brown).*$
我不知道这些(*SKIP)(*F) 标志,所以问题是,这些标志是如何工作的?他们在做什么?还有其他类似的标志吗?
谢谢。
【问题讨论】:
-
@SotiriosDelimanolis 实际上我没有在 java 模式上使用它我正在 regex101 上测试它
-
@SotiriosDelimanolis 是的,你是对的,但想法是稍后在 java 上实现这个正则表达式。首先我想学习正则表达式的方式。顺便说一句,你推荐我用什么标签而不是 java,因为我在 regex101 上做它?
-
@TheLostMind 无需道歉,我不想让任何人感到困惑。感谢您的修复。
-
这些标志是 Perl 兼容正则表达式 (PCRE) 的一个特性,所以我建议阅读它的 documentation(在文档中搜索您想了解的标签)。为了使用它们,您需要找到一个支持它们以用于您选择的语言的正则表达式库。我不知道有任何这样的 Java 库。
-
@Fede:我认为
(*SKIP)(*F)不会在 Java 上工作。不过,Java 中还有其他 hack 方法可以绕过 Java 中的可变长度回溯。
标签: regex