1

我有一堆带有标签的文档,如下所示(粗体):

Lorem ipsum dolor sit amet, \ConsecTeturTitle。Sed posuere consectetur est 在 lobortis。Lorem ipsum dolor sit amet, consectetur adipiscing elit。\textit{ \QuamLoremTitle }\specialnote{参见 { \EgestasMagnaTitle }Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor。Nullam quis risus eget urna mollis ornare vel eu leo。Cras justo odio,dapibus ac facilisis in,egestas eget quam。

我正在使用它来找到它们:

\\[A-Z].*Title

它在第一个方面做得很好:

\ConsecTeturTitle

但它会选择接下来的两个,以及介于两者之间的所有内容,如下所示:

\QuamLoremTitle}\specialnote{见 {\EgestasMagnaTitle

我一直在寻找答案,但恐怕我对 RegEx 的了解还不够,甚至不知道要搜索的正确内容。

基本上我需要找到以“\”和大写字母开头并以“Title”结尾的每个标签;然后我需要用“\hl”替换它们

我打算用这样的PHP来做:

preg_replace( '\\[A-Z].*Title', '\hl', $docContents );

任何帮助深表感谢!

4

1 回答 1

2

该正则表达式有一个问题:它包含一个额外的点。你应该使用类似这样的东西:

\\[A-Za-z]+Title

您现有表达式的问题是.*匹配任意数量的字符并且它如此贪婪(即,只要它可以继续运行并且最后仍然匹配,它就永远不会停止Title)。所以发生的事情是它从“第一个”匹配开始匹配,然后继续吞噬字符,直到它停止在应该是最后一个匹配的“标题”后缀处。

于 2012-04-06T17:02:48.117 回答