Php 用于检测单词缩写的正则表达式

Php 用于检测单词缩写的正则表达式,php,regex,Php,Regex,我目前正在开发一个CSV,其中包含葡萄牙行政区域和邮政编码的信息,但该文件没有遵循任何严格的格式,这意味着有时整个字符串都是大写的,还有其他问题 我想解决的问题如下:一些地区的名称末尾有一个缩写,与它的家长的管理级别有关,我想删除它。据我所知,这是规则: 缩略语长度不超过3个字符(到目前为止始终为3个字符) 第一个字符可以是任何字母,不区分大小写 最后两个字符总是辅音(例如Z、B、M、P、…) (编辑)缩写词总是作为字符串中的最后一个单词出现 (编辑2)-字符串总是UTF-8 目的是从区域名称中

我目前正在开发一个CSV,其中包含葡萄牙行政区域和邮政编码的信息,但该文件没有遵循任何严格的格式,这意味着有时整个字符串都是大写的,还有其他问题

我想解决的问题如下:一些地区的名称末尾有一个缩写,与它的家长的管理级别有关,我想删除它。据我所知,这是规则:

  • 缩略语长度不超过3个字符(到目前为止始终为3个字符)
  • 第一个字符可以是任何字母,不区分大小写
  • 最后两个字符总是辅音(例如Z、B、M、P、…)
  • (编辑)缩写词总是作为字符串中的最后一个单词出现 (编辑2)-字符串总是
    UTF-8

    目的是从区域名称中删除这些缩写。

    听起来很简单

    /\b[a-z][ZBMP]{2}\b/i
    
    如果要匹配任何这样描述的缩写,请在第二个字符类(
    [ZBMP]
    )中添加字母以完成匹配


    只有当它不是另一个单词的一部分时,它才会匹配(这是
    \b
    的工作)。

    关于“太多TLA”的问题呢?
    foo
    是一个有效的词还是一个首字母缩略词?哪个首字母缩略词?如果名称末尾出现3个字符,且符合上述规则,则为缩写。我已经用“手”检查过了。@yoda,它总是一行中的最后一个字母?@MarcB
    tla
    foo
    在最后两个字符点都有元音,所以不会受到影响。我只是想说清楚,FTR;)我们可以在以后进一步讨论这个问题;IRC FTW@yoda您应该更新您的问题以包含该信息,因为“始终是行中的最后一件事”可以大大提高准确性。它匹配的单词超过3个字符。如果我把最后一个词拆分出来,应用这个表达,它会起作用,但它不能单独起作用。@yoda:它对我起作用。您测试它的对象是什么字符串?它与以下字符串断开:
    UrrôArc
    。这可能与特殊角色有关。顺便说一下,字符串是用
    UTF-8
    编码的。显然
    ô
    被认为是单词边界:P等等