用正则表达式的代码卡住应用HTML标签的文本,但如果排除里面>标签
可能重复:
RegEx match open tags except XHTML self-contained tags用正则表达式的代码卡住应用HTML标签的文本,但如果排除里面<?>标签
我想写一点正则表达式这将请阅读由我们的编辑撰写的一些文本,并将<acronym>
标签应用到它找到的我们的“术语词汇表”中的缩写集的第一个实例。
因此,对于此示例,我使用了缩写ITS
。
我想我做的第一个事情是设置与scenerios的组合我可以测试反对,即ITS
坐在标点符号,HTML标签&那些我们已经应用了已经(换句话说为例脚本之前已经完成了,所以不需要再做)。
我几乎没有,但只是卡住在最后一个点:-(
这里是到目前为止,我已经得到了正则表达式 - <[^<|]+?>?>ITS<[^<]+?>|ITS
的例子 - 从(每周ITS IN BOLD要与缩略WRAPPED):
I want you to tag this
ITS, but not this wrapped one - <acronym title="ITS" id="thisIsATest">ITS</acronym>
这又是一个考验,因为我还是想更新
<p>
ITS</p>
有各地them.`包裹其它的HTML标签及其希望那些开始的句子和那些完成ITS。 ITS,和那些被包裹在punctuation.`
Test link:
<a href="index.cfm>ITS</a>
,我想将其更改为:
I want you to tag this <acronym title="ITS">ITS</acronym>
,但不是这一个包裹 -<acronym title="ITS">ITS</acronym>
This is another test as I still want to update <acronym title="ITS">ITS</acronym>
具有其它的HTML标签周围them.`
<acronym title="ITS">ITS</acronym> want ones that start sentences and ones that finish <acronym title="ITS">ITS</acronym>. <acronym title="ITS">ITS</acronym>, and ones which are wrapped in punctuation.
Test link:
<acronym title="ITS"><a href="index.cfm>ITS</a></acronym>
包裹是否有任何注册防爆专家在那里,可以帮助我完成这一关?任何其他提示提示也将不胜感激。
**更新** 不知道如果这有助于但这会发现仅在该段:
<acronym[^<]*ITS</acronym>
,这会发现所有的ITS:
<[^<]*>ITS<[^<]*>|ITS
我真正需要的是一种组合这些的方式来说找到所有的ITS,但排除标签中的那些。
非常感谢, 詹姆斯
附:如果这可以帮助任何人使用特定的语法,这将被放置在ColdFusion应用程序中。
这里的HTML我试图解析:
工作的呢?
(?!(<acronym\W*>|\w))ITS(?!(<acronym\W*>|\w))
没有经过测试,因为我没有的ColdFusion
看起来ColdFusion的不支持lookbehinds。但是,仍然可以使用lookahead((?!...)
)确保字符串(ITS)后面没有跟着</acronym>
。
\\WITS(?!(</acronym\\W*>|\\w))
既然你不能使用lookbehinds,你需要\ W在开始的时候,以确保该字符串不是另一个词的一部分。不幸的是,如果匹配,它会吃掉前一个字符。 \ w在最后也确保它不是一个单词的一部分。
感谢您的帮助Szupie。我在gskinner中试过。com正在使用的RegExr应用程序,现在它不会突出显示任何内容。 – 2010-04-20 14:19:10
嗯,我搞砸了。此外,ColdFusion不支持向后看,所以开始部分是不好的。我编辑了一个新模式。 – szupie 2010-04-20 23:37:41
这是你的基本问题:正则表达式不是解析器。这个问题已经被多次讨论过了,只有正则表达式没有通用的解决方案。通过使用前瞻,后视和一些非常复杂的步法,你可以将它伪装成一个点,但是你很快就会发现你的表情很难维护。
我可以建议一对夫妇的方法。
如果您使用的是符合XML的文本,则可以使用xmlparse()解析文本,然后遍历结果结构,将正则表达式应用于每个节点的xmltext。
或者,您可以尝试用占位符替换文本块中的每个标记,对生成的文本执行替换,然后还原占位符。
显然,这些都不是完美的,但是,或者,通过一些调整,可能会让你去你要去的地方。
感谢Ben的输入。真的,我所要做的是一条规则,“在每个不在之内的ITS周围包装”。我不需要检查每个标签等。 为了使事情变得简单,虽然该示例没有显示,但我们只是希望将其应用于文本中的第一个实例,而不是所有人,所以我希望这不是太复杂(他说!!)。 干杯, James – 2010-04-20 15:19:59
避免已经包装的实例可能会用我建议的第二种方法最好的完成。我想我误解或读入你的帖子,你还需要避免text,所以你不要断开链接(和图像,链接的脚本,等等)。 – 2010-04-20 16:21:30
“这个问题已经过很多次了”是一种轻描淡写。 “用正则表达式解析HTML”问题在SO上每45分钟就会显示一次:p – womp 2010-04-20 23:49:29
使用反引号进行内联代码;新行上的4个空格将为您提供一个代码块。 – 2010-04-20 13:37:28
我把一些格式化,但我不知道它现在是否准确地问你的问题,所以看看。你的意思是你的测试链接实际上是功能性的吗?如果是这样,你需要完整的链接('http:// ...'),而不仅仅是你提供的相关链接。 – 2010-04-20 13:43:12
感谢您的帮助B.希望现在看起来更好一点:-) – 2010-04-20 14:31:43