2015-03-04 2 views
0

Моя программаСтрока Java Class соответствует Метод

public class EHFix { 
static String regExpCharacter = "(.*)HI(.*)"; 
public static void main(String[] args) { 

    String val="HI How are you"; 
    String secondValue="HI How \r are you"; 
    String thirdValue="HI How \n are you";   
    System.out.println(val.matches(regExpCharacter)); 
    System.out.println(secondValue.matches(regExpCharacter)); 
    System.out.println(thirdValue.matches(regExpCharacter)); 

} 

My output is: true 
       false 
       false 

Почему для SecondValue и thirdValue переменной печатает ложь, даже если она соответствует regExpCharacter?

+0

\ г, \ п не охвачены. – amit

ответ

0

Потому что . по умолчанию не будет соответствовать разрыву строки \n или \r. Таким образом изменить регулярное выражение,

"(?s)(.*)HI(.*)" 

(?s) модификатор DOTALL, что делает точку присутствующую в своем регулярном выражении, чтобы соответствовать также разрывы строк.

ИЛИ

"([\\s\\S]*?)HI([\\s\\S]*)" 

[\s\S] соответствует любому пространства или не символ пробела. \s соответствует разрыву строк.

String regExpCharacter = "(?s)(.*)HI(.*)"; 
String val="HI How are you"; 
String secondValue="HI How \r are you"; 
String thirdValue="HI How \n are you";   
System.out.println(val.matches(regExpCharacter)); 
System.out.println(secondValue.matches(regExpCharacter)); 
System.out.println(thirdValue.matches(regExpCharacter)); 

Выход:

true 
true 
true 
+0

Спасибо много брака .. действительно супер – user1976891

+0

может показать пример для разницы «(? S) (. *) HI (. *)" И "([\\ s \\ S] *?) HI ([\ \ s \\ S] *) " – user1976891

+0

и" "(? s) (. *?) HI (. *)" и "([\\ s \\ S] *?) HI ([\\ s \\ S] *) "будет выполнять ту же работу. –

Смежные вопросы