2015-10-22 11 views
7

Satırın başlangıcını ve sonunu belirtmek için^ve $ tuşlarını kullanıyorum. Böyle

Pattern pattern = Pattern.compile("^Key2 = (.+)$"); 

ve girdi:

String text = "Key1 = Twas brillig, and the slithy toves" 
    + "\nKey2 = Did gyre and gimble in the wabe." 
    + "\nKey3 = All mimsy were the borogroves." 
    + "\nKey4 = And the mome raths outgrabe."; 

Ama pattern.matcher(text).find() döner false.

Bu çalışma yapılmamalıdır mı? Pattern class documentation, bu özet belirtir:

 
Boundary matchers 
^ The beginning of a line 
$ The end of a line 

cevap

9

Varsayılan olarak, bu semboller tüm giriş dizisinin başını ve sonunu maç. Daha aşağıda bu same Pattern class documentation içinde (vurgu eklenmiştir) ile

: Varsayılan olarak

, düzenli ifadeler^ve $ tüm giriş sırasıyla başında ve sonunda hat yok ediciler ve tek maç görmezden sıra. MULTILINE modu etkinleştirilmişse,^girişin başında ve girişin dışında herhangi bir satır sonlandırıcıdan sonra eşleşir. MULTILINE modundayken $ bir satır sonlandırıcıdan veya giriş sırasının sonundan hemen önce eşleşir. onlar Pattern.MULTILINE ile desen derleyerek özet tablosunda belgelenen olarak

Yani^$ ve iş yapabilirsiniz:

Pattern pattern = Pattern.compile("^Key2 = (.+)$", Pattern.MULTILINE); 
+0

fantastik :) i geçmiş – AbtPst

+1

@AbtPst kendimi bununla mücadele - Kendim de. Javadoc'taki detaylar gömüldü; Özet kısa bir açıklama kullanabilir. Yıllar boyunca bu çok kez karşılaştım, çözdüm ve unuttum. Bir dahaki sefere bu stackoverflow sorusu olacak! –