我正在尝试使用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
我显然误解了反向引用的使用,但无法弄清楚原因。
谢谢!
答案 0 :(得分:3)
删除?
中的.*?
,您不希望它变得懒惰。
将?
添加到量词使其变得懒惰,这大致意味着它将匹配尽可能少的数量,而整体正则表达式仍然返回匹配。
你最后没有锚,所以当.*?
匹配最少量(因为懒惰)时,它匹配,没有,没有。您的整个正则表达式仅匹配The
。
这应该可以解决问题
preg_replace('/^(the|an?) (.*)/i', '$2, $1', 'The Final Book Title');