gpt4 book ai didi

Java 正则表达式 : Negative lookahead

转载 作者:IT老高 更新时间:2023-10-28 20:55:27 25 4
gpt4 key购买 nike

我正在尝试制作两个匹配 URI 的正则表达式。这些 URI 的格式为:/foo/someVariableData/foo/someVariableData/bar/someOtherVariableData

我需要两个正则表达式。每个都需要匹配一个而不是另一个。

我最初想出的正则表达式是:/foo/.+/foo/.+/bar/.+ 分别。

我认为第二个正则表达式很好。它只会匹配第二个字符串。然而,第一个正则表达式匹配两者。所以,我开始(第一次)用消极的前瞻来玩。我设计了正则表达式 /foo/.+(?!bar) 并设置了以下代码来测试它

public static void main(String[] args) {
String shouldWork = "/foo/abc123doremi";
String shouldntWork = "/foo/abc123doremi/bar/def456fasola";
String regex = "/foo/.+(?!bar)";
System.out.println("ShouldWork: " + shouldWork.matches(regex));
System.out.println("ShouldntWork: " + shouldntWork.matches(regex));
}

当然,它们都解析为 true

有人知道我做错了什么吗?我不一定需要使用 Negative lookahead,我只需要解决问题,我认为negative lookahead 可能是一种方法。

谢谢,

最佳答案

试试

String regex = "/foo/(?!.*bar).+";

或者可能

String regex = "/foo/(?!.*\\bbar\\b).+";

为了避免像 /foo/baz/crowbars 这样的路径出现故障,我假设您确实希望该正则表达式匹配。

解释:(没有Java字符串要求的双反斜杠)

/foo/ # Match "/foo/"
(?! # Assert that it's impossible to match the following regex here:
.* # any number of characters
\b # followed by a word boundary
bar # followed by "bar"
\b # followed by a word boundary.
) # End of lookahead assertion
.+ # Match one or more characters

\b,“单词边界 anchor ”,匹配字母数字字符和非字母数字字符之间的空格(或字符串的开头/结尾和 alnum 字符之间)。因此,匹配"bar"b前或r后,w之间匹配失败> 和 "crowbar" 中的 b

Protip:看看http://www.regular-expressions.info - 一个很棒的正则表达式教程。

关于Java 正则表达式 : Negative lookahead,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11125459/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com