java - 正则表达式向后匹配最近的字符

标签 java regex

我有这个字符串:

P.1           P.2                    P.3                   P.4  
          ASTON VETERINARY HOSPITAL                                       
            Page 1/2   
        00 PennelJ Road  
      Media, PA 19063-5983 
          (610) 474-5670           
Client :      

我想获取 ClientP.\d 之间的文本。这是演示:Regex

(P.\d)[\s\S]*(?=^.+Client :?)

问题在于它与第一页 P.1 相匹配。我需要在 Client 之前最近的 P.\d

如何更改正则表达式,使其与 P.4 匹配。

最佳答案

我用非贪婪运算符尝试过这个,但这行不通。我会尝试不再让整个正则表达式完全匹配您想要的内容,而是使用组。然后你可以编写一个匹配器来匹配任意数量的 P.1构造,它使您扫描 Client最后的字符串要简单得多,因为您不必尝试将其作为前瞻。因此:

String x = "P.1  P.2    P.3   P.4 foobar  Client :";
Pattern p = Pattern.compile("((P\\.\\d)(.*(P\\.\\d))*)+(?<result>.*)Client");
Matcher m = p.matcher(x);
System.out.println(m.find());
System.out.println(m.group("result"));

似乎正好能生产出您想要的东西。语法(?<whatever>REGEX HERE)正则表达式的意思是:让我稍后通过询问组“whatever”来捕获这一点。

关于java - 正则表达式向后匹配最近的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52407265/

相关文章:

java - 使用 Spring Security 在运行时切换身份验证方法?

java - 如何在数组填满时结束的循环中随机填充二维数组

c# - .Net 正则表达式是否有小写表达式?

java - 将 JRuby 与 nailgun 一起使用时如何停止/启动 rails/webrick?

JAVA比较器抛出错误(多线程执行)

java - MyBatis Guice 中 MyBatis XML 多环境等价物

regex - 从 ls 输出中获取文件大小

javascript - javascript模式匹配的正则表达式

javascript - 计算字符串中特定单词的出现次数

PHP 正则表达式删除 HTML 文档中的标签