正则表达式预测为什么

时间:2018-01-19 04:24:41

标签: php regex pcre

对于PCRE,以下两个正则表达式之间的区别是什么? (?=<!--)([\s\S]*?-->)(<!--[\s\S]*?-->)

第一个是匹配 HTML评论提到的HERE

1 个答案:

答案 0 :(得分:1)

这两种模式将匹配相同的东西。以下是对第一种模式的解释:

WITH t1 AS(
    SELECT id, key as status, trim(both '"' from value::text) as time_of 
    FROM test, json_each(status)
),
t2 as(
SELECT id, status,
  to_timestamp(time_of, 'YYYY-MM-DD"T"HH24:MI:SS') as time_of,
  MAX(to_timestamp(time_of, 'YYYY-MM-DD"T"HH24:MI:SS')) 
        OVER(PARTITION by id) AS max_time       
FROM t1)
SELECT id, status, max_time 
FROM t2
WHERE time_of = max_time;

第二种模式不使用前瞻,而只是匹配单个HTML注释:

(?=<!--)         assert that what immediately follows is <!--
([\s\S]*?-->)    then capture everything, across lines if necessary,
                 until reaching the first -->

同样,这种模式将跨越各行匹配。

我希望这两种模式都具有相似的性能。您选择的将取决于哪种方式对您的数据,您使用的工具(并非所有正则表达式引擎都支持外观)更好,以及您发现哪种模式更易于阅读。