选择2个评论标签之间的所有文字的最佳方法是什么? E.g。
<!-- Text 1
Text 2
Text 3
-->
<\!--.*
将抓取<!-- Text 1
但不会抓取Text 2
,Text 3
或-->
修改
根据Basti M的回答,<\!--((?:.*\n)*)-->
将选择第一个 <!--
和最后一个 -->
之间的所有内容。即下面第1到11行。
如何修改此选项以仅选择单独标签中的行?即第1至4行:
1 <!-- Text 1 //First
2 Text 2
3 Text 3
4 -->
5
6 More text
7
8 <!-- Text 4
9 Text 5
10 Text 6
11 --> //Last
答案 0 :(得分:10)
根据您的基础引擎,使用s
- 修饰符(并在表达式的末尾添加-->
。
这将使.
匹配换行字符。
如果您无法使用s
- 标志,则可以使用
<!--((?:.*\r?\n?)*)-->
说明:
<!-- #start of comment
( #start of capturing group
(?: #start of non-capturing group
.*\r?\n? #match every character including a line-break
)* #end of non-capturing group, repeated between zero and unlimited times
) #end of capturing group
--> #end of comment
要匹配多个评论区块,您可以使用
/(?:<!--((?:.*?\r?\n?)*)-->)+/g
答案 1 :(得分:2)
答案 2 :(得分:1)
Regex is not the right tool to parse html or xml,使用正确的解析器,我在这里使用xpath:
$ cat file.xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<test>
<!-- Text 1
Text 2
Text 3
-->
</test>
测试:
$ xmllint --xpath '/test/comment()' file.xml
<!-- Text 1
Text 2
Text 3
-->
如果您解析html,请使用--html
开关。