【问题标题】:how to match any string in Emacs regexp?如何匹配 Emacs 正则表达式中的任何字符串?
【发布时间】:2013-04-19 12:16:00
【问题描述】:

我指的是这个页面:http://ergoemacs.org/emacs/emacs_regex.html

这表示要在 Emacs Regexp 中捕获模式,您需要像这样转义括号:\(myPattern\)

它进一步说捕获ASCII字符序列的语法是[[:ascii:]]+

在我的文档中,我尝试匹配出现在 <p class="calibre3"></p> 之间的所有字符串

所以,按照上面的语法,我为

做一个替换正则表达式

<p class="calibre3">\([[:ascii:]]+\)</p>

但它找不到匹配项。

建议?

【问题讨论】:

  • 我猜你有一些非 ascii(代码 0-127)字符。也许是一些 unicode?​​span>

标签: regex emacs


【解决方案1】:

正则表达式不适用于通用的 HTML 解析,但由于段落标签不能有效嵌套,以下内容会很好(前提是标记有效且格式正确)。

<p class="calibre3">\(.*?\)</p>

*? 是非贪婪的零次或多次重复运算符,因此它将尽可能少地匹配——在这种情况下,直到下一个 &lt;/p&gt; 之前的所有内容(与贪婪版本相反,它将匹配直到文本中的最后一个&lt;/p&gt;)。

[^&lt;] 方法如果适合相关数据则很好,但如果段落中有其他标签,则它不起作用。

【讨论】:

【解决方案2】:

您需要转义尖括号,我会像这样使用 [^

\<p class="calibre3"\>([^<]+\)</p\>

【讨论】:

  • 您在结尾的&lt;/p&gt; 中缺少了一个\...我修复了它并尝试了它,但仍然没有匹配项。即使我的文档包含很多这样的字符串 &lt;p class="calibre3"&gt;1 April Fool 3&lt;/p&gt;
  • 我认为没有必要转义尖括号,这对我有用&lt;p class="calibre3"&gt;\([^&lt;]\)+&lt;/p&gt;
  • @TooTone 你的语法&lt;p class="calibre3"&gt;\([^&lt;]\)+&lt;/p&gt; 有效!
  • 没必要,\&gt;\&lt; 是 emacss regexp 风格中单词匹配的开始/结束。
【解决方案3】:

&lt;p class="calibre3"&gt;\([^&lt;]\)+&lt;/p&gt;

来源:@TooTone

【讨论】:

  • (我的解决方案基于 Dave 将 [^
猜你喜欢
  • 2013-08-02
  • 1970-01-01
  • 1970-01-01
  • 2011-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多