正则表达式匹配字符串除了特定字符串的一部分

时间:2017-02-09 20:57:14

标签: regex

我正在尝试匹配特定字符串,但仅当它不是一对特定文字字符串的一部分时。我希望排除文字字符串<span class='highlight'></span>内的结果。因此,如果我搜索“light”,“high”,“pan”,“an”等,我想匹配任何其他不属于这两个文字的事件。

我不是要解析完整的HTML,只是列出了那两个永远不会改变的字符串。类值永远不会从'突出显示'更改。

我已经尝试过各种各样的外表,捕捉群体,非捕捉群体等我能想到的并且没有任何想法。外观似乎不起作用,我打赌因为字符串相对于要排除的案例的位置不能保证按某种顺序排列。

这只能用正则表达式吗?

2 个答案:

答案 0 :(得分:0)

这种方法适合你吗?

  1. 使用空字符串搜索并替换这两个标记:

    s/(<span class='highlight'>|<\/span>)//g
    
  2. 搜索字符串

  3. 当然,你的搜索字符串最终可能是&#34;&#34;其中一个比特,例如搜索abcd并匹配ab</span>cd。你可以解决我用一些字符序列替换你确定不是可以搜索的东西。

    您也会失去相对于这些标签所寻找的字符串状况的背景,但不知道您要完全实现的目标,这很困难说这对你是否重要。

答案 1 :(得分:0)

哎呀,我以为我正在简化我的问题,但事实证明我错了。我继承了一个字符串代码,并在搜索字词列表中进行正则表达式替换,方法是逐个循环遍历它们并将匹配包装在<span class="highlight"></span>中。如果您搜索“光线”,那么就会产生一个像“Look the the light”这样的短语,看起来不正确。匹配并替换“the”,然后匹配“light”,但匹配新替换的“the”标签。诀窍不在于修复在每个单词上运行的正则表达式,而是将其更改为将所有单词一起处理的正则表达式。而不是使用the替换正则表达式,而是light,正则表达式只需要the|light