用于匹配字符串且不包含子字符串

时间:2015-10-19 15:46:51

标签: regex xml

我正在处理一些JSF代码,需要在项目中的所有stlyeClass中插入<h:commandButton>。问题是有很多commandButtons,我不想手动完成。另一个问题是一些commandButtons已经包含了styleClass,而有些则没有。因此我需要一个正则表达式来查找不包含styleClass的commandButton,所以在编辑其余部分之前我首先可以在那里插入我的代码。希望我的解释有意义。请尝试回答问题而不是解决方法。

非常感谢!

1 个答案:

答案 0 :(得分:0)

假设您正在讨论Eclipse搜索和替换功能,以下正则表达式应该适合您。它会增加一些不必要的&#34;在某些情况下的空格,但这些可以通过简单的让eclipse再次自动格式化整个文件来删除。 (选择项目根目录并按CTRL+Shift+F选择最懒的选项 - 或者忽略空格。)

要验证它是否与所有命令按钮匹配:

  • 首先在<h:commandButton上运行文件搜索,记下该号码。
  • 在下面的模式上运行替换,在尝试替换之前比较匹配的数字。 (它应该是相同的,而不是更小的,不是更大的)

注意:您的styleClass-Attributes不得包含"字符!

正则表达式:

<h:commandButton([^>]+(?=styleClass)|)(?:styleClass="([^"]+)")?([^>]*?)(\/?>)

替换(myNewStyleClassForEveryCommandButton应该是您想要设置的样式):

<h:commandButton$1 styleClass="myNewStyleClassForEveryCommandButton $2"$3$4

转换以下示例:

<h:commandButton />
<h:commandButton>

</h:commandButton>

<h:commandButton styleClass="something" />
<h:commandButton styleClass="something">

</h:commandButton>
<h:commandButton attr="value" styleClass="something more" />
<h:commandButton attr="value" styleClass="something more">

</h:commandButton>
<h:commandButton attr="value" styleClass="something" anotherAttr="somethingElse"/>
<h:commandButton 
  attr="value" 
  styleClass="something" 
  anotherAttr="somethingElse">

</h:commandButton>

进入这个结果:

<h:commandButton styleClass="myNewStyleClassForEveryCommandButton " />
<h:commandButton styleClass="myNewStyleClassForEveryCommandButton ">

</h:commandButton>

<h:commandButton  styleClass="myNewStyleClassForEveryCommandButton something" />
<h:commandButton  styleClass="myNewStyleClassForEveryCommandButton something">

</h:commandButton>
<h:commandButton attr="value"  styleClass="myNewStyleClassForEveryCommandButton something more" />
<h:commandButton attr="value"  styleClass="myNewStyleClassForEveryCommandButton something more">

</h:commandButton>
<h:commandButton attr="value"  styleClass="myNewStyleClassForEveryCommandButton something" anotherAttr="somethingElse"/>
<h:commandButton 
  attr="value" 
   styleClass="myNewStyleClassForEveryCommandButton something" 
  anotherAttr="somethingElse">

</h:commandButton>

https://regex101.com/r/tD0dU9/7

在尝试此之前提交并推送:-)