我需要找到所有出现的" st"在任何html页面上的任何类声明中,例如:
class="st0 st1 st2", class="st3 st45", class="st678"
我在一个类声明中说,因为可能会出现其他类型的" st"在整个文件中,我不想每次都改变。
我的最终目标是寻找和替换。我已经为此写出了逻辑,但我只需要弄清楚如何隔离" st"来自字符串。
我已经尝试了几种不同的外观表达式,但似乎无法匹配每次出现。以下是我一直在尝试的一些例子。
此表达式可以获得' class ="'和''':
正则表达式:
(?<=class=").*(?=")
测试刺痛:
class="st10 st11"
匹配结果:
"st10 st11"
这是我尝试的另一个:
正则表达式:
(?<=class=")((st)\d*\s*)*(?=")
测试刺痛:
class="st10 st11"
匹配结果:
"st10 st11"
匹配群组:
我一直在Rubular.com
测试我的正则表达式 从评论中添加
我将在终端shell命令中使用正则表达式,我将在特定文件夹上运行该命令。 shell命令将对文件夹中的每个文件执行查找和替换,如此...
perl -pi -w -e 's/st/stx/g;' ~/Desktop/svg_find_replace/*.svg.
非常感谢任何帮助。
答案 0 :(得分:0)
您可以使用基于\G
to chain matches的正则表达式。
(?:class="|\G(?!^))(?:(?!st)[^"])*\Kst
(?:
会打开non capturing group进行更改。(?:class="|\G(?!^))
第一部分是设置匹配开始的位置。 \G
也会匹配字符串的开头。为防止这种情况,使用了否定lookahead (?!^)
。(?:(?!st)[^"])*
此部分用于匹配not "
的任意数量的字符,并防止使用否定前瞻st
<跳过(?!st)
/ LI>
\K
resets报告的比赛开始。Here is the demo at regex101。这可能是一个相当先进的模式。 SO有一个很好的regex faq。