Regex 正则表达式查找不在HTML标记内的短语

Regex 正则表达式查找不在HTML标记内的短语,regex,coldfusion,Regex,Coldfusion,我对这个正则表达式有点纠结,想知道是否有人愿意帮助我 我需要做的是在一个字符串中分离出第一个短语,而这个字符串不在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

我对这个正则表达式有点纠结,想知道是否有人愿意帮助我

我需要做的是在一个字符串中分离出第一个短语,而这个字符串不在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应用程序中用我自己定制的包装首字母缩略词标记替换这些标记

非常感谢,
James

正如评论员所指出的,正则表达式不是处理XML/HTML类文本的好工具。这是因为“在”某些东西是很难在任何一般情况下检查的(你永远不知道你在这些可能的无限嵌套级别中处于哪一个)

但是,对于您的特定示例,这是可能的。这在很大程度上依赖于没有任何嵌套的标记。如果你这样做了,你应该认真地尝试另一种方法

你的例子很有用

^(?:<[^<]*<[^>]*>|.)*?(ITS)

正如评论员所指出的,正则表达式不是处理XML/HTML类文本的好工具。这是因为在任何一般情况下都很难检查“内部”内容(您永远不知道您处于哪种可能的无限嵌套级别)

但是,对于您的特定示例,这是可能的。这在很大程度上依赖于没有任何嵌套标记。如果有,您应该认真尝试另一种方法

你的例子很有用

^(?:<[^<]*<[^>]*>|.)*?(ITS)

^(?:我会告诉你当你问一个非常类似的问题时我告诉你的事情:

你不能用纯正则表达式解析HTML,包括嵌套元素。这是正则表达式的一个已知限制,并且有很好的文档记录

您可以尝试安装并使用带有扩展的外部正则表达式引擎,这可能会起作用。您可以手动遍历字符串,计算嵌套数,以查看正在查看的字符串是否已包装。您可以使用真正的HTML解析器,如WebKIT,在外部执行此操作


但是你不能用正则表达式。请寻找替代方法。见鬼,我们甚至会提供帮助。

我会告诉你当你问一个非常类似的问题时我告诉你的同样的事情:

你不能用纯正则表达式解析HTML,包括嵌套元素。这是正则表达式的一个已知限制,并且有很好的文档记录

您可以尝试安装并使用带有扩展的外部正则表达式引擎,这可能会起作用。您可以手动遍历字符串,计算嵌套数,以查看正在查看的字符串是否已包装。您可以使用真正的HTML解析器,如WebKIT,在外部执行此操作

但是你不能用正则表达式。请寻找替代方法。见鬼,我们甚至会提供帮助。

你说:

目的是用我的 在中拥有自定义包装的首字母缩略词标记 我正在写ColdFusion应用程序

听起来使用XSL比使用正则表达式更适合将一个标记转换为另一个标记

更新:

把这些放在一起,似乎对简单的情况有效:

(注意:这将简单地去掉“首字母缩略词”标记。您可以使用XSL将它们替换为您自己的自定义标记,但您没有按照这些行指定任何内容,因此我没有对此进行讨论)

XSL:


输入:

<?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

这是关于的一些测试文本
这个**是它的**部门。同样值得
我想也提到腹肌吧,
这是关于**的**测试文本
对于
它的部门。也值得
我想也提到腹肌
更新:

你说:

所以在第一个例子中,我希望它 忽略包装好的,给我 它在第一句的末尾

在第二个例子中,我希望它 在第2节开始时返回ITS 判决

这毫无意义。你的第二个示例在第二句中没有“ITS”。我想你的意思是,
**ITS**
是你想要提取的内容

我给出的XSL示例仅剥离了
标记,但完成后,您可以尝试在句子中的不同点找到
它的
,因此正则表达式可能很容易(这假设您只需要担心
标记)。

您说:

目的是用我的 在中拥有自定义包装的首字母缩略词标记 我正在写ColdFusion应用程序

听起来使用XSL比使用正则表达式更适合将一个标记转换为另一个标记

更新:

把这些放在一起,似乎对简单的情况有效:

(注意:这将简单地去掉“首字母缩略词”标记。您可以使用XSL将它们替换为您自己的自定义标记,但您没有按照这些行指定任何内容,因此我没有对此进行讨论)

XSL:


输入:

<?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

这是关于的一些测试文本
这个**是它的**部门。同样值得
我想也提到腹肌吧,
这是关于**的**测试文本
对于
它的部门。也值得
提到ABS以及I gues