java - 这种情况下如何使用正则表达式呢?

标签 java regex regular-language

字符串是:“LinksImagesListCodeHt1233ddmlImagesConsider112dd2Download”,我想获取“ImagesConsider112dd2Download”。所以我使用了这个表达式“Images.*?Download”。但它与“ImagesListCodeHt1233ddmlImagesConsider112dd2Download”匹配。正确的表达式应该是什么?

暂时有一个丑陋的方法来解决这个问题:

Pattern p = Pattern.compile(StringUtils.reverse("Download")+ ".*?" + StringUtils.reverse("Images") );
String s = "LinksImagesListCodeHt1233ddmlImagesConsider112dd2Download";
s = StringUtils.reverse(s);
Matcher m = p.matcher(s);
while (m.find()){
    m.end();
    System.out.println(StringUtils.reverse(m.group()));
}

最佳答案

要匹配 ImagesDownload 之间不包含单词 Images 的文本,您可以使用像这样的否定查找

Images((?!Images).)*Download

说明
Images -- 匹配文字字符串Images
(?!Images). -- 匹配不跟在 Images 单词后面的字符
((?!Images).)* -- 匹配零次或多次

关于java - 这种情况下如何使用正则表达式呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49713258/

相关文章:

regex - 具有奇数个 1 和至少一个 0 的正则表达式

java - java中线程的使用方法

javascript - 使用正则表达式查找字符模式

java - 取消正在运行的处理程序

php - 使用 preg_match 只接受 UTF8 字母

c# - 匹配所有美国电话号码格式的正则表达式

regex - 哪些编程语言是常规的?

regex - [a-zA-Z] 的正则表达式

java - 如何使用 Spring 设置 RESTful API

java - 如何用十位数填充数组