Çok Satırlı Metin eşleşen düzenli ifade kullanarak
Çoklu satır metin java kullanarak eşleştirmeye çalışıyorum. Pattern.MULTILINE değiştirici Pattern sınıf kullandığımda, maç için mümkün duyuyorum, ama bu kadar (?m). ile bunu yapmak mümkün değilim
(?m) kullanarak String.matches ile aynı desen çalışmak için görünmüyor.
Bir şey, ama hiçbir fikri ne eksiğim var eminim. Düzenli ifadeler de Aram iyi değil,
Bu çalıştığım şey buydu
String test = "User Comments: This is \t a\ta \n test \n\n message \n";
String pattern1 = "User Comments: (\\W)*(\\S)*";
Pattern p = Pattern.compile(pattern1, Pattern.MULTILINE);
System.out.println(p.matcher(test).find()); //true
String pattern2 = "(?m)User Comments: (\\W)*(\\S)*";
System.out.println(test.matches(pattern2)); //false - why?
CEVAP
İlk olarak, yanlış bir varsayım altında değiştiriciler kullanıyorsun.
Pattern.MULTILINE (?m) söyler Java için kabul çapa ^ $ maç başlangıç ve bitiş her satırı (aksi takdirde sadece maç başlangıç/bitiş tüm dize).
Pattern.DOTALL (?s) Java nokta yeni satır karakterleri maç için de izin söyler.
İkincisi, senin durumunda normal ifade, normal ifade eşleşme bekliyor matches() yöntemi kullanıyorsun çünkü başarısız olurtümelbette bazı karakterler (\\W)*(\\S)* sonra sol olmadığından çalışmıyor hangi dize eşleşiyor.
Eğer öyleyse sadece User Comments: ile başlayan bir dize arıyorsan normal ifade kullanın
^\s*User Comments:\s*(.*)
Pattern.DOTALL seçenek: ile
Pattern regex = Pattern.compile("^\\s*User Comments:\\s (.*)", Pattern.DOTALL);
Matcher regexMatcher = regex.matcher(subjectString);
if (regexMatcher.find()) {
ResultString = regexMatcher.group(1);
}
ResultString User Comments: sonra metin içerir

Nasıl JavaScript düzenli ifade eşleşen...
Nasıl Java düzenli ifade için metin ka...
Çok satırlı bayrak değil Javascript dü...
Nasıl bir dize düzenli ifade kullanara...
Düzenli ifade deseni her yerde dize eş...