正则表达式不知道在哪里停止

时间:2012-04-06 17:01:31

标签: php regex

我有一堆带有标签的文件(粗体):

Lorem ipsum dolor sit amet, \ ConsecTeturTitle 。在lobortis的Sed posuere consectetur est。 Lorem ipsum dolor坐下来,精致的adipistur elit。 \ textit { \ QuamLoremTitle } \ specialnote {See { \ 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 );

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:2)

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

\\[A-Za-z]+Title

现有表达式存在的问题是,.*匹配任意数量的字符,而贪婪地(即只要它可以,它就永远不会停止继续前进,仍然匹配最后的Title。所以会发生的事情是它在“第一次”匹配时开始匹配,然后继续吞噬字符,直到它停在本应该是最后一场比赛的“标题”后缀。