【问题标题】:Regex text and some tags between tag正则表达式文本和标签之间的一些标签
【发布时间】:2023-12-22 22:01:01
【问题描述】:

我对正则表达式标签 html 有疑问。任何人请帮助我! 谢谢这是我的一些情况......我有搜索和思考但没有这样做。

案例一

// My input to regex
    <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit <br/><a href="#"><img src="img.jpg/></a> sed do eiusmod
    tempor incididunt ut labore et dolore magna aliqua<p>

// Out Put after regex    
Lorem ipsum dolor sit amet, consectetur adipisicing elit <br/><a href="#"><img src="img.jpg/></a> sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua

案例 2

// My input to regex
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit</p>

// Out put after regex            
Lorem ipsum dolor sit amet, consectetur adipisicing elit

案例 3

// My input to regex

<p><ul>...</ul><p>

//Out put after regex

NULL

【问题讨论】:

  • 你能解释一下原因吗?
  • 我认为这里的问题是没有代码,而且完全不清楚您在问什么或是否在问问题。
  • 我想用正则表达式匹配标签并得到输出。
  • 因为很难理解你到底在问什么,而且你没有解释到目前为止你自己尝试过什么来解决它们。
  • 问这个问题的更好方法是:我想要一个匹配 P 元素内容的正则表达式,但前提是内容是文本或其中包含 html 元素的文本,而不是当内容只是一个 html 元素时。至少我认为你是这么问的,但我不能确定。

标签: php html regex tags


【解决方案1】:

我猜这就是你所追求的(javascript 中的示例)。

function checkParagraph(str)
{
    var result = str.match(/^<p>([^<].*[^>])<\/p>$/i);
    if (result) return result[1];
    else return null;
}

alert(checkParagraph("<p>Lorem ipsum <br/><a href=\"#\"><img src=\"img.jpg\"/></a> magna aliqua</p>"));
alert(checkParagraph("<p>Lorem ipsum magna aliqua</p>"));
alert(checkParagraph("<p><a href=\"#\"><img src=\"img.jpg\"/></a></p>"));

加上关于只允许 BR、IMG、A 和 IMG-inside-A 标签的附加信息,正则表达式完全不同:

function checkParagraph(str)
{
    var result = str.match(/^<p>(([^<>]+|<br\/>|<img[^>]+>|<a[^>]+>[^<>]*<\/a>|<a[^>]+><img[^>]+><\/a>)*)<\/p>$/i);
    if (result) return result[1];
    else return null;
}

alert(checkParagraph("Lorem ipsum magna aliqua"));
alert(checkParagraph("<p>Lorem ipsum magna aliqua</p>"));
alert(checkParagraph("<p>Lorem ipsum <br/> magna aliqua</p>"));
alert(checkParagraph("<p>Lorem ipsum <a href=\"#\">magna</a> aliqua</p>"));
alert(checkParagraph("<p>Lorem ipsum <img src=\"img.jpg\"/> magna aliqua</p>"));
alert(checkParagraph("<p>Lorem ipsum <br/><a href=\"#\"><img src=\"img.jpg\"/></a> magna aliqua</p>"));
alert(checkParagraph("<p><br/><a href=\"#\"><img src=\"img.jpg\"/></a></p>"));
alert(checkParagraph("<p><span>magna</span> aliqua</p>"));
alert(checkParagraph("<p><a href=\"#\"><span>magna</span> aliqua</a></p>"));
alert(checkParagraph("<p><br/><a href=\"#\"><img src=\"img.jpg\"/><span>magna</span> aliqua</a></p>"));

正则表达式的分解:

/.../i -> 大小写标签不区分大小写
^&lt;p&gt;...&lt;\/p&gt;$ -> 输入包含在 P 标签中
(...) -> 括号之间的捕获组将变为结果[1]
(...|...)* -> 以下任意数量的选项:
[^&lt;&gt;]+ -> 选项 1:任何不带标签的文本
&lt;br\/&gt; -> 选项 2:BR 标签
&lt;img[^&gt;]+&gt; -> 选项 3:一个 IMG 标记
&lt;a[^&gt;]+&gt;[^&lt;&gt;]*&lt;\/a&gt; -> 选项 4:一个带有文本的 A 标记
&lt;a[^&gt;]+&gt;&lt;img[^&gt;]+&gt;&lt;\/a&gt; -> 选项 5:一个带有 IMG 标记的 A 标记

【讨论】:

  • 这很好,但我只想要标签

    中的标签
    被接受,其余返回 null

  • 这就是您的问题中缺少的解释。最好同时给出一些示例并用文字准确描述所需的结果。
  • 我以为我的子问题不会得到回答,但我错了!你有专业人士和好人,这对我来说非常完美。非常感谢你!!!
最近更新 更多