Regex 如何查找包含两个字符串的字符串并替换其中一个
我有很多html文件,其中一个标签使用了错误的类,我需要替换它们。我可以找到所有需要替换的标签,但我不确定如何正确替换它们 我有这样的想法:Regex 如何查找包含两个字符串的字符串并替换其中一个,regex,Regex,我有很多html文件,其中一个标签使用了错误的类,我需要替换它们。我可以找到所有需要替换的标签,但我不确定如何正确替换它们 我有这样的想法: <div id="myDiv" att1="blah" class="classToBeReplaced"> blah </div> class="classToBeReplaced" 其中一些标记具有不同的属性,具体取决于它们所在的文件。 最好的方法是什么?向后看不能是可变长度的,因此更容易捕获目标左侧的整条线,并使用反向引用
<div id="myDiv" att1="blah" class="classToBeReplaced"> blah </div>
class="classToBeReplaced"
其中一些标记具有不同的属性,具体取决于它们所在的文件。
最好的方法是什么?向后看不能是可变长度的,因此更容易捕获目标左侧的整条线,并使用反向引用将其全部放回:
Search: ^(<div id="myDiv".*?class=")classToBeReplaced(?="[^<]*</div>)
Replace: $1newClass
Search:^(如果我理解你的问题,你可以这样做:
<div id="myDiv" att1="blah" class="classToBeReplaced"> blah </div>
class="classToBeReplaced"
使用替换字符串:
class="classYouWant"
\1"classNEW"
另一方面,如果只想更换div,可以使用:
(<div id="myDiv".*)"classToBeReplaced
在@Bohemian的帮助下,我最终实际使用的是:
(myDiv.*?)classToBeReplaced(.*?>)
取而代之的是
$1newClass$2
我在每种情况下都有不同的属性,所以我需要考虑到这一点。提供几个不同的匹配,以便创建一个合适的正则表达式。最好不要使用正则表达式来处理此类任务。下面的模式如何:
@CommuSoft当然不起作用,但OP似乎没有这个问题。Nev然而,我认为使用正则表达式进行xml/html处理是一种不好的做法。xslt等工具更适合此任务。@CommuSoft如果OP正在编辑一个大的源文件进行一次性重构该怎么办?正则表达式替换是唯一的方法。有一些xml SAX解析器和处理器具有相同的时间复杂度和可忽略的内存协作这么做很简单。我认为只针对给定的id?@CommuSoft,是的,我也这么认为,只是现在更新了。多亏了这一点