Heim > Artikel > Backend-Entwicklung > 正则里面s包括回车吗?
文档上说\s表示空白字符 回车算不算空白字符呢
用实际例子测试了一下,不同的环境结果各不相同
测试文件内容
test.txt
PH
P and JA
VA
<code>$text=file_get_contents('test.txt'); #print $text; preg_match("/PH\sP/s",$text,$match); print_r($match); preg_match("/JA\sVA/s",$text,$match); print_r($match); </code>
php匹配出来为空
<code>Pattern php = Pattern.compile("PH\\sP",Pattern.DOTALL); Pattern java = Pattern.compile("JA\\sVA",Pattern.DOTALL); BufferedReader in = new BufferedReader(new FileReader("test.txt")); StringBuffer sb=new StringBuffer (); String s; while ((s = in.readLine()) != null) { sb.append(s); } Matcher m = php.matcher(sb); while(m.find()) { System.out.println(m.group()); } m = java.matcher(sb); while(m.find()) { System.out.println(m.group()); } </code>
java都能匹配出来
文档上说\s表示空白字符 回车算不算空白字符呢
用实际例子测试了一下,不同的环境结果各不相同
测试文件内容
test.txt
PH
P and JA
VA
<code>$text=file_get_contents('test.txt'); #print $text; preg_match("/PH\sP/s",$text,$match); print_r($match); preg_match("/JA\sVA/s",$text,$match); print_r($match); </code>
php匹配出来为空
<code>Pattern php = Pattern.compile("PH\\sP",Pattern.DOTALL); Pattern java = Pattern.compile("JA\\sVA",Pattern.DOTALL); BufferedReader in = new BufferedReader(new FileReader("test.txt")); StringBuffer sb=new StringBuffer (); String s; while ((s = in.readLine()) != null) { sb.append(s); } Matcher m = php.matcher(sb); while(m.find()) { System.out.println(m.group()); } m = java.matcher(sb); while(m.find()) { System.out.println(m.group()); } </code>
java都能匹配出来
回车是/r/n,不是空白,要在/s模式下就包括了,preg_match('/lalla /s',$youString)
,s 模式中的圆点元字符(.)匹配所有的字符,包括换行符
如果设置了s这个修饰符,模式中的"点号"元字符匹配所有字符,包含换行符。如果没有这个 修饰符,点号不匹配换行符。这个修饰符等同于 perl 中的/s修饰符。 一个取反字符类比如 1 总是匹配换行符,而不依赖于s这个修饰符的设置。