Php preg_replace()具有新顺序的多个反向引用
我正试图用preg_replace()修改书名,以便按照图书馆处理书名的方式进行字母排序;将单词“the”、“a”和“an”从标题开头移动到标题末尾 例如,我正在使用书名“Final book title”,并希望将该书名修改为“Final book title,the”,以便实际标题为“Final book title”的书能够与示例中的书正确排序Php preg_replace()具有新顺序的多个反向引用,php,regex,preg-replace,Php,Regex,Preg Replace,我正试图用preg_replace()修改书名,以便按照图书馆处理书名的方式进行字母排序;将单词“the”、“a”和“an”从标题开头移动到标题末尾 例如,我正在使用书名“Final book title”,并希望将该书名修改为“Final book title,the”,以便实际标题为“Final book title”的书能够与示例中的书正确排序 preg_replace('/^(the |a |an )(.*?)/i', '$2, $1', 'The Final Book Title');
preg_replace('/^(the |a |an )(.*?)/i', '$2, $1', 'The Final Book Title');
上面的代码生成字符串:,这是最终的书名
我显然误解了反向引用的使用,但不明白为什么
谢谢 删除
*?
中的?
,您不希望它懒惰
将?
添加到量词会使它变懒,这大致意味着它将匹配尽可能少的数量,而整个正则表达式仍返回匹配
你在结尾没有锚,所以当*?
匹配尽可能少的数量时(因为懒惰),它匹配,嗯,什么都不匹配。您的整个正则表达式只与匹配
这应该能奏效
preg_replace('/^(the|an?) (.*)/i', '$2, $1', 'The Final Book Title');
噢!谢谢你的帮助,这太完美了!您可以将第一个捕获组重写为(|an?
),可能需要将空格移到括号外,否则结果末尾会有一个尾随空格。