对于PCRE,以下两个正则表达式之间的区别是什么?
(?=<!--)([\s\S]*?-->)
和
(<!--[\s\S]*?-->)
第一个是匹配 HTML评论提到的HERE
答案 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 -->
同样,这种模式将跨越各行匹配。
我希望这两种模式都具有相似的性能。您选择的将取决于哪种方式对您的数据,您使用的工具(并非所有正则表达式引擎都支持外观)更好,以及您发现哪种模式更易于阅读。