PHP和JavaScript正则匹配所有字符(包括换行符)的差异
在PHP和JavaScript中,正则表达式匹配所有字符(包含换行符)是不一样的。
假设有这样的字符串:
Hello, PHP, JavaScript
现在,我们要从里面中找出后面两行,也就是多行查找。
1PHP实现
在PHP中,这样写:
$str='Hello, PHP, JavaScript'; $find=''; preg_match('/PHP.*?Script/is',$str,$find); print_r($find[0]);
其中,
- i标识忽略大小写。
- s就表示点号元字符匹配所有字符,包含换行符。如果没有这个修饰符,点号不匹配换行符。
2JavaScript实现
JavaScript中只有四个模式修饰符:g、i、m、y。
这里,i标识也是忽略大小写的作用。
但是并没有如s的修饰符,也就是说,JavaScript中点号不匹配换行符。
那怎么办?
办法是有的,就是把点号换成[\s\S]。
和PHP同等功能的代码如下:
varstr="Hello,\n\ PHP,\n\ JavaScript"; varfind=[]; find=str.match(/PHP[\s\S]*?Script/ig); console.log(find[0]);
当然,这个JS中的正则表达式,直接搬到PHP中是可以直接用的。
参考地址:
- 正则表达式匹配任意字符(包括换行符)的写法
- HowtouseJavaScriptregexovermultiplelines?
- PHP模式修饰符
- JavaScript正则表达式