示例字符串:
这是一个包含一些测试用例\ cite {author1,author2}的示例字符串。然后{另一个例子} \ citeauthor {author3},最后是\ citeP {author1}和字符串在这里完成。
要求: 1.我需要在{}之间提取内容,但在全局之后提取“\ cite”字符串。 (例如。\ cite {..}或\ citeauthor {..})
我尝试过: preg_match('/[^\\\\cite]{(.*?)}/', $text, $match);//dint work
2.使用基于demiliter的提取字符串,字符串将被展开。(eg. if extracted string="author1,author2")
,然后它将根据“,”charac)展开。//it will be done with explode()
3.如果大括号来自(\cite or \citeauthor etc)
,则应将其替换为for eg. <xref cite>exploded string</xref>
,因为我想知道该字符串是否来自"cite" or "citeauthor" or "citeP".
4.如果爆炸的字符串是第一次出现,我想要替换字符串。 For eg. <xref cite 1>exploded string</xref>
预期输出
这是一个带有一些测试用例的示例字符串<xref cite 1>author1</xref><xref cite 1>author2</xref>.
然后{另一个示例} <xref citeauthor 1>author3</xref>
,最后是<xref citeP>author2</xref>
,字符串在这里完成。
那么,如何获得(\cite or \citep or \citeauthor)
之间的字符串{}
以及文件中第一次出现的字符串。
output = <xref cite 1>exploded string</xref>
- 如果我在\cite
之后只在{}之间得到字符串,那么如何在每次出现时都获得"\cite"
字符串。
谢谢阅读。对不起这篇重要帖子,我认为这是可以理解的
答案 0 :(得分:1)
您可以使用preg_replace_callback
:
$s = 'This is a example string with some testing cases \cite{author1,author2}.
Then {another example} \citeauthor{author3} and finally
\citeP{author1} and string completes here.';
echo preg_replace_callback('/\\\\(cite(?:P|author)?){([^}]*)}/', function($m) {
return preg_replace('/([^,]+)(?:,|$)/' ,'<xref '. $m[1] . ' 1>$1</xref>', $m[2]); },
$s);
<强>输出强>
This is a example string with some testing cases <xref cite 1>author1</xref><xref cite 1>author2</xref>. Then {another example} <xref citeauthor 1>author3</xref> and finally <xref citeP 1>author1</xref> and string completes here.