php 正则表达式:排除带括号的第一行

pqwbnv8z  于 2023-01-16  发布在  PHP
关注(0)|答案(3)|浏览(122)

我尝试去掉所有HTML括号,除了使用此正则表达式的第一行代码中的任何内容
(?毫秒)(?!\A)〈[^〉]*〉
它非常接近于工作,不幸的是它也从第一行去掉了右括号。我正在使用的例子是:

<div id="uniquename">https://www.example.com?item_id=10302</div>
<div id="uniqname2">
<div id="uniqname3">
<h2 id="uniqnametitle">Title</h2>
<div class="row">
<div class="large-3 columns">Example:</div>
<div class="large-9 columns"><b>Sub example</b></div>
</div>
<div class="row">
<div class="large-3 columns">Additional</div>

当前的REGEX删除所有其他HTML标记,并排除第一行(尾随div结束标记除外),并输出以下内容:

<div id="uniquename">https://www.example.com?item_id=10302
Title
Example:
Sub example
Additional

如果有比排除第一行更好的方法来执行REGEX我愿意接受建议。跳过第一行似乎是最简单的方法,然而,我需要结束括号保持完整。
我在我的正则表达式中遗漏了什么?

iqjalb3h

iqjalb3h1#

更新1:刚刚意识到它可以大大简化
一个一个

lymnna71

lymnna712#

你可以试试这个
(?ms)((?<firstline>\A[^\n]*)|(<[^>]*>))
有替代
$firstline
示例的Playground-https://regex101.com/r/ASItOP/3

fslejnso

fslejnso3#

您应该使用HTML解析器一般...
但是,您可以:

$ cat <(head -n 1 file) <(sed 1d file | sed -E 's/<[^>]*>//g; /^$/d')

或是一只鹰:

$ awk 'FNR==1 {print; next}
      {gsub(/<[^>]*>/,""); if ($0) print}' file

打印:

<div id="uniquename">https://www.example.com?item_id=10302</div>
Title
Example:
Sub example
Additional

相关问题