合并多个 REGEX 语句

Merge multiple REGEX statements

提问人:Madara's Ghost 提问时间:10/5/2011 最后编辑:Madara's Ghost 更新时间:10/5/2011 访问量:384

问:

我有一个示例字符串。

This should be **bold**, *indented* or ***bold and indented***.

使用 3 个正则表达式对字符串进行解析,这些正则表达式一个接一个地运行,以获得以下结果:

This should be <b>bold</b>, <i>indented</i> or <b><i>bold and indented</i></b>.

这很简单,工作正常。但是,我想为我节省几行(如果可能,更漂亮,更有效率,那为什么不呢?),然后合并它们。在单个正则表达式语句中进行所有替换。是否有可能提高效率?还是我应该保持原样?(即使我应该这样做,我也希望看到可能的解决方案?

我的匹配语句:

  • \*\*\*(.+?)\*\*\* -> <b><i>$1</b></i>
  • \*\*(.+?)\*\* -> <b>$1</b>
  • \*(.+?)\* -> <i>$1</i>
正则表达式 替换

评论

0赞 Chriszuma 10/5/2011
请包含您正在使用的 3 个正则表达式。
0赞 Madara's Ghost 10/5/2011
我真的认为这应该很明显(这不是菜鸟问题),尽管如此,我还是会添加它。

答:

2赞 Amber 10/5/2011 #1

老实说,将它们保留为 3 个单独的正则表达式几乎可以肯定......

  1. 更具可读性
  2. 简单
  3. (由于 #1 和 #2)更易于维护。

行数越少并不总是越好,尤其是在正则表达式方面。


此外,您实际上只需要 2 个正则表达式 - 粗体和斜体。只要总是先运行粗体:

***foo***

在粗体正则表达式之后......

*<b>foo</b>*

然后斜体正则表达式使...

<i><b>foo</b></i>

哪个是正确的输出。(首先运行粗体的原因是因为斜体会匹配,因为哪个是错误的。***<i>*</i>

评论

0赞 Madara's Ghost 10/5/2011
不过,对于理论研究,您能举一个可行的例子吗?
1赞 Amber 10/5/2011
其实不然,因为基本正则表达式不允许在其替换中使用逻辑(例如,你不能说“在这些条件下用这个字符串替换,或者在这些条件下用那个字符串替换”)。某些语言具有基于回调的正则表达式替换,可以这样做,但您必须先指定一种语言。