如何匹配/识别字符串中的文章(An,A,The)以移动到字符串的末尾

GDP*_*GDP 0 php regex

出于排序目的,我想忽略正在排序的标题中的文章.我已经能够在MySQL中完成它,但我需要在PHP中复制.

标题:

A Tale of Two Cities      --> Tale of Two Cities, A
An Unexpected Journey     --> Unexpected Journey, An
The Lord Of the Rings     --> Lord Of The Rings, The

$sortable = preg_replace([A |An |The]... 
Run Code Online (Sandbox Code Playgroud)

我有一个复杂的数组处理例程,如果可能的话我想用一个简单的preg_xxx语句替换.已经足够修饰,相信我,"我试过的东西"只会混淆这个问题,哈哈.

为了将来参考,纯MySQL中的情况也是如此:

SELECT Title,
    CASE WHEN SUBSTRING_INDEX(Title, ' ', 1) IN ('a', 'an', 'the')
        THEN CONCAT(
            SUBSTRING(Title, INSTR(Title, ' ') + 1),
            ', ',
            SUBSTRING_INDEX(Title, ' ', 1)
        )
        ELSE Title
    END AS Sortable
FROM Titles
ORDER BY Sortable
Run Code Online (Sandbox Code Playgroud)

Abr*_*ver 8

从字符串的开头捕获并反向替换反向引用:

$sortable = preg_replace('/^(A|An|The) (.+)/', '$2, $1', $title);
Run Code Online (Sandbox Code Playgroud)

摘要:

  • ^ 匹配字符串的开头
  • 随后 OR OR 后跟一个空格
  • 任何字符后跟.1次或更多次+
  • 括号()是一个捕获组,捕获匹配的内容,并$1在第一组和$2第二组的替换中引用