可能重复:
RegEx match open tags except XHTML self-contained tags
我正在尝试编写一些正则表达式,这些正则表达式将通过我们的编辑编写的一些文本,并将<acronym>
标记应用于它找到的我们在“词汇表”中保存的缩写集的第一个实例条款“。
因此,对于此示例,我使用了缩写ITS
。
我认为我要做的第一件事就是设置一个示例,其中混合了我可以测试的场景,即ITS
坐标点,HTML标签&amp;我们已经应用了这个(换句话说,脚本之前已经完成了这个,所以不需要再做了)。
我差不多到了最后一点: - (。
这是我到目前为止的正则表达式 - <[^<|]+?>?>ITS<[^<]+?>|ITS
示例 - FROM(每个 ITS IN BOLD 要用ACRONYM包装):
I want you to tag this
的 ITS, but not this wrapped one - <acronym title="ITS" id="thisIsATest">ITS</acronym>
这是另一项测试,因为我仍然希望更新
<p>
ITS</p>
,其他HTML标记会围绕它们。ITS 想要那些开始句子和完成 ITS 的句子。 ITS ,以及用标点符号包裹的内容。
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标记。
<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>
那里有哪些Reg Ex专家可以帮我完成这项任务吗?任何其他提示技巧也将不胜感激。
**更新** 不知道这是否有帮助,但这会在该段中找到唯一的:
<acronym[^<]*ITS</acronym>
这将找到所有ITS:
<[^<]*>ITS<[^<]*>|ITS
我真正需要的是一种结合这些的方法,以便找到所有的ITS,但不包括标签中的那些。
非常感谢, 詹姆斯
P.S。如果这对任何具有特定语法的人都有帮助,那么这将放在ColdFusion应用程序中。
这是我要解析的HTML:
答案 0 :(得分:2)
这是您的基本问题:正则表达式不是解析器。已经多次接近这个问题,并且没有仅使用正则表达式的通用解决方案。你可以通过使用前瞻,后瞻和一些非常复杂的步法将它伪装成一个点,但是你很快就会达到你的表达难以维持的程度。
我可以建议一些方法。
如果您使用的是符合XML的文本,则可以使用xmlparse()解析文本,然后逐步执行生成的结构,将正则表达式应用于每个节点的xmltext。
或者,您可以尝试使用占位符替换文本块中的每个标记,对生成的文本执行替换,然后还原占位符。
显然,这些都不是完美的,但要么通过一些调整,可能会让你到达目的地。
答案 1 :(得分:0)
这有用吗?
(?!(<acronym\W*>|\w))ITS(?!(<acronym\W*>|\w))
由于我没有ColdFusion,所以没有经过测试
看起来ColdFusion不支持lookbehinds。但是,您仍然可以使用前瞻((?!...)
)来确保字符串(ITS)后面没有</acronym>
。
\\WITS(?!(</acronym\\W*>|\\w))
由于你不能使用lookbehinds,你需要\ W在开头确保字符串不是另一个单词的一部分。不幸的是,如果匹配,它会占用前一个字符。最后的\ w也确保它不是一个单词的一部分。