【问题标题】:Removing curly braces outside texs math-mode删除texs数学模式外的花括号
【发布时间】:2016-11-21 07:24:55
【问题描述】:

我想在 texs 数学模式之外删除大括号。例如:

Lorem Ipsum $\mathbb{R}$ dolore. {Author} $\{1,\dotsc,n}$

应该变成:

Lorem Ipsum $\mathbb{R}$ dolore. Author $\{1,\dotsc,n}$

因为你不能真正否定正则表达式,所以我正在研究前瞻和后瞻。从技术上讲,这对我不起作用,{Author} 也在两个美元符号之间。一些正则表达式专家对我有什么建议?

我希望只在问题不太复杂时才使用 preg_replace。

【问题讨论】:

    标签: php regex curly-braces math-mode


    【解决方案1】:

    您可以使用这个基于前瞻的正则表达式:

    $re = '/\$\\\w*{[^}]+}(*SKIP)(*F)|{[^}]*}/'; 
    $str = "Lorem Ipsum \$\mathbb{R}\$ dolore. {Author} \${1,\dotsc,n}\$"; 
    
    $result = preg_replace($re, '', $str);
    
    //=> Lorem Ipsum $\mathbb{R}$ dolore.  Author $\{1,\dotsc,n}$ 
    

    RegEx Demo

    这里我们使用 PCRE 动词 (*SKIP)(*F) 来跳过数学模式块并替换其余文本中的 { 和 }:

    【讨论】:

    • 感谢@WiktorStribiżew,我在回答中也添加了该选项
    • 非常感谢,我用 PHP 5.5.9 在我的 2.1GHz 双核笔记本电脑上检查了两者的执行时间。差异很明显但很小。 100k preg_replace 调用,然后平均给出:负前瞻:4.5*10^-6 sec/preg_replace 和 PCRE:4.0*10^-6 sec/preg_replace
    • 我注意到正则表达式会在这种情况下删除所有花括号:“$\mathbb{R} $ dolore.{Author}”你有什么建议需要改变什么时候也可以工作美元前面有空格吗?
    • 像魅力一样工作。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-08
    • 1970-01-01
    • 2020-02-01
    • 1970-01-01
    相关资源
    最近更新 更多