preg_replace()具有新顺序的多个反向引用

时间:2014-05-13 15:01:07

标签: php regex preg-replace

我正在尝试使用preg_replace()来修改图书标题,以便图书馆处理图书标题的方式进行字母化。从标题的开头到标题的结尾移动单词“the”,“a”和“an”。

就我的例子而言,我正在使用书名“The Final Book Title”,并希望将该标题修改为“Final Book Title,The”,以便将一本名为“Final Book Title”的书正确地排序。在我的例子中的书。

preg_replace('/^(the |a |an )(.*?)/i', '$2, $1', 'The Final Book Title');

上面的代码会产生字符串:, The Final Book Title

我显然误解了反向引用的使用,但无法弄清楚原因。

谢谢!

1 个答案:

答案 0 :(得分:3)

删除?中的.*?,您不希望它变得懒惰。

?添加到量词使其变得懒惰,这大致意味着它将匹配尽可能少的数量,而整体正则表达式仍然返回匹配。

你最后没有锚,所以当.*?匹配最少量(因为懒惰)时,它匹配,没有,没有。您的整个正则表达式仅匹配The

这应该可以解决问题

preg_replace('/^(the|an?) (.*)/i', '$2, $1', 'The Final Book Title');