我正在构建一个脚本,它会从我们的模板系统中过滤掉所有可翻译的内容。我面临的问题是 2 个可翻译文本在一条线上的情况。
这些是模板文件中的 2 行示例,它们都包含一个或多个可翻译
<img src="/captcha/generate.jpg" alt="[#Captcha#]" />
<span>[#Velden met een * zijn verplicht in te vullen#]</span> <button type="submit" name="frm_submit" class="right">[#Verzend#]
当我放开以下正则表达式时
egrep "\[#(.*)#\]" . -Rohis
我得到这个输出
[#Captcha#]"
[#Velden met een * zijn verplicht in te vullen#]</span> <button type="submit" name="frm_submit" class="right">[#Verzend#]
虽然所需的输出是
[#Captcha#]
[#Velden met een * zijn verplicht in te vullen#]
[#Verzend#]
尝试使用正则表达式解析 HTML 会很痛苦,只是不要这样做。Jeff 在Parsing Html The Cthulhu Way中写道。“但我只想______”,没关系,认真的,别做。花点时间学习一些旨在解析 html 的东西。
我个人会为此推荐一个 Perl 模块(例如HTML::TreeBuilder),但是您知道哪些语言?其他选项是:tidy+ xmlstarlet xmlgawk xpath xml2。
如果您只想要文本中的“渲染”html,您可以使用链接之类的东西:
links -dump www.google.com
同意凯尔。但是,在这种情况下,您可以这样做:
egrep "\[#([^]])*)#\]" . -Rohis
得到您正在寻找的东西。[^]]*
匹配非]
字符,所以它会在第一个命中]
时停止。借调凯尔的评论。
无论如何,如果模式足够统一,你可以实现你想要的我匹配除了结束字符之外的任何东西,即
如果您在文本中关闭 ],则此模式将不起作用,例如 [#xyz]#] 将不匹配。
使用 Perl,它可以让您进行非贪婪匹配。对于您观看多场比赛的情况,请使用 /g 修饰符。我们添加了 -l 开关,因为我们必须自己处理换行: