簡體   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