如何检查 PHP 中只有开引号或闭引号进行替换?

问题描述 投票:0回答:1

在带有分隔符的文本中,我需要为用 LaTeX 编写的文档创建多个段落。此代码的目的是将引号内的任何内容替换为

\textquote{the text}

我们假设以下文本:

$str="Irán pueblos numerosos diciendo: «Vamos a subir al monte del Señor, al templo del Dios de Jacob».|Él nos enseñará sus caminos y caminaremos por sus sendas.|Viene el Mesías, el Cristo; cuando venga, nos hará saber todas las cosas.";

我需要创建以下内容:

\fourargs
{Irán pueblos numerosos diciendo: \textquote{Vamos a subir al monte del Señor, al templo del Dios de Jacob}.}
{%
Él nos enseñará sus caminos y caminaremos por sus sendas.%
}{%
Viene el Mesías, el Cristo; cuando venga, nos hará saber todas las cosas.%
}{%
Él nos enseñará sus caminos y caminaremos por sus sendas.%
}
    

我可以使用以下代码实现这一点,没有任何问题:

演示

$str="Irán pueblos numerosos diciendo: «Vamos a subir al monte del Señor, al templo del Dios de Jacob».|Él nos enseñará sus caminos y caminaremos por sus sendas.|Viene el Mesías, el Cristo; cuando venga, nos hará saber todas las cosas.";    
$html="";
$break=PHP_EOL."\t";
$quotes=["/'(.*?)'/",'/"(.*?)"/',"/«(.*?)»/","/“(.*?)”/"];
$textquote="\\textquote{\$1}";                  
$fourArgs="
\\fourargs
    {%s}
    {%%
        %s%%
    }{%%
        %s%%
    }{%%
        %s%%
    }";
$tmp=explode('|',preg_replace($quotes,$textquote,$str));
$html.=sprintf($fourArgs,
           $tmp[0],
           $tmp[1],
           $tmp[2],
           $tmp[1]
       );
echo $html;

在进行

explode
时,当开盘价和收盘价被放置在不同的组中时,我的问题就出现了。在这种情况下,用
textquote{...}
进行替换将无法按预期工作。

假设有以下代码:

演示

$str
内容如下:

$str="Irán pueblos numerosos diciendo: «Vamos a subir al monte del Señor, al templo del Dios de Jacob.|Él nos enseñará sus caminos y caminaremos por sus sendas».|Viene el Mesías, el Cristo; cuando venga, nos hará saber todas las cosas.";    

最终结果如下:

\fourargs
    {Irán pueblos numerosos diciendo: \textquote{Vamos a subir al monte del Señor, al templo del Dios de Jacob.}
    {%
        Él nos enseñará sus caminos y caminaremos por sus sendas}.%
    }{%
        Viene el Mesías, el Cristo; cuando venga, nos hará saber todas las cosas.%
    }{%
        Él nos enseñará sus caminos y caminaremos por sus sendas}.%
    }

但是预期的结果是:

\fourargs
    {Irán pueblos numerosos diciendo: \textquote{Vamos a subir al monte del Señor, al templo del Dios de Jacob}.}
    {%
        \textquote{Él nos enseñará sus caminos y caminaremos por sus sendas}.%
    }{%
        Viene el Mesías, el Cristo; cuando venga, nos hará saber todas las cosas.%
    }{%
        \textquote{Él nos enseñará sus caminos y caminaremos por sus sendas}.%
    }

怎样才能在所有情况下都达到预期的结果?

php regex latex
1个回答
0
投票

根据您提供的示例,我有一个简单的解决方案。您可以在匹配文本中将

.|
替换为
}.|\\textquote{
,以插入额外的
\textquote
块。我假设这里
|
符号前面有
.

function textquotereplace(array $matches){
    $str = str_replace('.|', '}.|\\textquote{', $matches[1]);
    return "\\textquote{{$str}}";
}

$tmp=explode('|',preg_replace_callback($quotes,'textquotereplace',$str));
© www.soinside.com 2019 - 2024. All rights reserved.