PHP和JavaScript正则匹配所有字符(包括换行符)的差异

在PHP和JavaScript中,正则表达式匹配所有字符(包含换行符)是不一样的。

假设有这样的字符串:

Hello,
PHP,
JavaScript

现在,我们要从里面中找出后面两行,也就是多行查找。

1 PHP实现

在PHP中,这样写:

$str = 'Hello,
PHP,
JavaScript';

$find = '';
preg_match('/PHP.*?Script/is', $str, $find);
print_r($find[0]);

其中,

  • i标识忽略大小写。
  • s就表示点号元字符匹配所有字符,包含换行符。如果没有这个修饰符,点号不匹配换行符。

2 JavaScript实现

JavaScript中只有四个模式修饰符:gimy

这里,i标识也是忽略大小写的作用。

但是并没有如s的修饰符,也就是说,JavaScript中点号不匹配换行符

那怎么办?

办法是有的,就是把点号换成[\s\S]

和PHP同等功能的代码如下:

var str = "Hello,\n\
PHP,\n\
JavaScript";

var find = [];
find = str.match(/PHP[\s\S]*?Script/ig);
console.log(find[0]);

当然,这个JS中的正则表达式,直接搬到PHP中是可以直接用的。

 

参考地址:

  1. 正则表达式匹配任意字符(包括换行符)的写法
  2. How to use JavaScript regex over multiple lines?
  3. PHP模式修饰符
  4. JavaScript正则表达式

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

昵称 *