匹配以HTML字符串中的特定模式开头的HTML类名称

时间:2018-06-26 10:06:06

标签: regex delphi lookbehind

我一直在寻找可以匹配一些以HTML字符串中的指定模式开头的类名称的时间。 这是我终于想出的正则表达式:

/(?<=(<[^>]*class=("|')(\w|\ |\-)*))((?<= |\'|\")(foo-|-foo)[^ "']*)/gmi

我一直在使用的示例是:

<body>
<div style="margin-left:6px;" class="foo-pink blfoo-pin-foo-kue red yellow bar-green -moz-FF foo-pink moz-FF foo-pink" >
    <fieldset class="foo customClass foo clFieldsBar  bar-try" id="idField foo- bar-dfgdgdfg">         
         <legend><span>Qu'en pensez-vous ?</span></legend>
        < id="idText" class='foo- Comment_text fdgdgdfg -foo-ddede  mso-whitespace' name="nameText barName"></textarea> bar-deded foo-green
    </fieldset>
    class="blue dffsf sdf mso-green foo"
</div>  

您可以在此处看到以下RegEx实际执行的操作: https://regex101.com/r/6W5AUT/4

问题是我需要在Delphi代码中执行正则表达式。但是,当我这样做时,出现以下错误:

  

后置断言的长度不是固定的

在经过一些快速研究(错误原因之后)后,我发现我不能使用可变长度的负向后方。

我一直在尝试使用不同的方法(例如,用\ K重设匹配项)来转换RegEx,这就是我到目前为止想出的:

/(<[^>]*class=("|'))(\b(foo)(\w|\-)*)*/gmi

您可以看到它在这里工作: https://regex101.com/r/zeQDrK/2

如您所见,它仅与标记中每个类属性的第一个类名匹配。

现在就我所需要的精确地说吧

  • 匹配所有以模式开头的类名(可以是“ foo”,“-foo”或两者的组合),
  • 它只需要匹配html标记中的类名(这就是为什么您可以在HTML标记之外看到class =“ blue dffsf sdf mso-green foo”)的原因,
  • 它需要同时支持class =“ ClassName1 ClassName2”或class ='ClassName1 ClassName2'

对于解决此问题的任何帮助,我将不胜感激。 感谢您的宝贵时间。

0 个答案:

没有答案