我有一堆带有标签的文件(粗体):
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 );
非常感谢任何帮助!
答案 0 :(得分:2)
该正则表达式存在问题:它包含一个额外的点。你应该使用类似这样的东西:
\\[A-Za-z]+Title
现有表达式存在的问题是,.*
匹配任意数量的字符,而贪婪地(即只要它可以,它就永远不会停止继续前进,仍然匹配最后的Title
。所以会发生的事情是它在“第一次”匹配时开始匹配,然后继续吞噬字符,直到它停在本应该是最后一场比赛的“标题”后缀。