我正在用这个正则表达式挣扎,并想知道是否有人要帮助我吗?
我需要做的是隔离不在HTML标记内的字符串中的第一个短语。所以我现在的例子是:
This is some test text about <acronym
title="Incomplete Test Syndrome"
class="CustomClass">ITS</acronym> for
the **ITS** department. Also worth
mentioning ABS as well I guess.ITS,
......和......
This is some **ITS** test text about
<acronym title="Incomplete Test
Syndrome"
class="GOTManager">ITS</acronym> for
the ITS department. Also worth
mentioning ABS as well I guess
所以在第一个例子中,我希望它忽略包装的ITS,并在第一句末尾给我ITS。
在第二个例子中,我希望它在第二句开头返回ITS。
目的是在我正在编写的ColdFusion应用程序中用我自己的自定义包装缩写标签替换它们。
非常感谢, 詹姆斯
答案 0 :(得分:3)
正如评论员指出的那样,正则表达式不是处理类似XML / HTML的文本的好工具。那是因为“内部”某些东西很难在任何一般性中检查(你永远不知道在哪些可能的无限嵌套级别中)。
但是,对于您的特定示例,可以这样做。这很大程度上依赖于没有任何嵌套标签。如果你这样做,你应该认真尝试不同的方法。
您的示例适用于
^(?:<[^<]*<[^>]*>|.)*?(ITS)
这匹配整个字符串直到ITS的第一次出现而不是在标记中(并且在第一个捕获组中有这个),但是应该很容易提取您需要的数据。只有匹配此ITS实例是不可能的,因为正则表达式的实现不支持任意长度的后视。
询问您是否需要/需要解释的表达式。 =)
答案 1 :(得分:0)
当你问一个非常相似的问题时,我会告诉你同样的事情: Stuck with Regular Expression code to apply HTML tag to text but exclude if inside <?> tag
您无法使用纯正则表达式解析HTML(包括嵌套元素)。这是正则表达式的一个已知限制,并且有很好的文档记录。
您可以尝试安装和使用带扩展名的外部正则表达式引擎,这可能有效。您可以手动遍历字符串,计算嵌套数,以查看您正在查看的字符串是否已包装。您可以使用真正的HTML解析器,例如WebKIT在外部执行此操作。
但你不能用正则表达式做到这一点。请寻找替代方案。哎呀,我们甚至会帮忙。
答案 2 :(得分:0)
你说:
目的是用我的替换这些 自己定制包装的首字母缩略词标签 ColdFusion应用程序我正在写。
听起来使用XSL可能比正则表达式更适合将一个标签转换为另一个标签。
<强>更新强>
只是将它们放在一起,它似乎适用于简单的情况:
(注意:这将简单地删除'首字母缩略词'标签。您可以使用XSL将它们替换为您自己的自定义标签,但是您没有在这些行中指定任何内容,所以我没有进入那)
XSL:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="*[name() = 'acronym']" />
</xsl:stylesheet>
输入:
<?xml version="1.0" encoding="UTF-8"?>
<root>
This is some test text about <acronym
title="Incomplete Test Syndrome"
class="CustomClass">ITS</acronym> for
the **ITS** department. Also worth
mentioning ABS as well I guess.ITS,
This is some **ITS** test text about
<acronym title="Incomplete Test
Syndrome"
class="GOTManager">ITS</acronym> for
the ITS department. Also worth
mentioning ABS as well I guess
</root>
输出:
<?xml version="1.0" encoding="UTF-8"?>
This is some test text about for
the **ITS** department. Also worth
mentioning ABS as well I guess.ITS,
This is some **ITS** test text about
for
the ITS department. Also worth
mentioning ABS as well I guess
<强>更新强>
你说:
所以在我想要的第一个例子中 忽略包裹的ITS并给我 ITS在第一句末尾。
在第二个例子中我想要它 在第2个开始时返回ITS 句。
这没有任何意义。你的第二个例子在第二句中没有“ITS”。我认为你的意思是**ITS**
是你想要提取的。
我给出的XSL示例只剥离了<acronym/>
标签,但在完成之后你可以尝试在句子的不同点找到ITS
,也许正是因为正则表达式可能很容易(这个假设您只需要担心<acronym/>
标签。