繁体   English   中英

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

[英]Regex to match the nearest character backwards

我有这个字符串:

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之间获取文本。 这是演示:正则表达式

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

问题在于它与第一页P.1相匹配。 我需要在客户之前最接近的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”来抓住这一点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM