用于匹配拼音的正则表达式

 Allen 发布于 2023-02-08 15:46

我正在寻找能够正确匹配有效拼音的正则表达式(例如"sheng","sou"(同时忽略无效拼音,例如"shong","sei").谷歌顶级结果中提供的大多数正则表达式匹配在某些情况下无效的拼音.

显然,无论采用何种方法,这将是一个怪物正则表达式,我特别感兴趣的是可以采取不同的方法来解决这个问题.例如," 优化正则表达式来解析中文拼音 "使用了回溯.

可在此处找到有效拼音表:http: //pinyin.info/rules/initials_finals.html

1 个回答
  • 我去了一个正则表达式,用拼音的首字母(通常是第一个字母)分组较小的正则表达式.因此,第一组包括所有"b","p"和"m"声音,然后是"f",然后是"d"和"t"等.

    这种方法看起来很容易阅读,并且应该易于编辑(如果需要更正或添加).我还为群体的乞讨添加了例外以提高可读性.

    ([mM]iu|[pmPM]ou|[bpmBPM](o|e(i|ng?)?|a(ng?|i|o)?|i(e|ng?|a[no])?|u))|
    ([fF](ou?|[ae](ng?|i)?|u))|([dD](e(i|ng?)|i(a[on]?|u))|
    [dtDT](a(i|ng?|o)?|e(i|ng)?|i(a[on]?|e|ng|u)?|o(ng?|u)|u(o|i|an?|n)?))|
    ([nN]eng?|[lnLN](a(i|ng?|o)?|e(i|ng)?|i(ang|a[on]?|e|ng?|u)?|o(ng?|u)|u(o|i|an?|n)?|ve?))|
    ([ghkGHK](a(i|ng?|o)?|e(i|ng?)?|o(u|ng)|u(a(i|ng?)?|i|n|o)?))|
    ([zZ]h?ei|[czCZ]h?(e(ng?)?|o(ng?|u)?|ao|u?a(i|ng?)?|u?(o|i|n)?))|
    ([sS]ong|[sS]hua(i|ng?)?|[sS]hei|[sS][h]?(a(i|ng?|o)?|en?g?|ou|u(a?n|o|i)?|i))|
    ([rR]([ae]ng?|i|e|ao|ou|ong|u[oin]|ua?n?))|
    ([jqxJQX](i(a(o|ng?)?|[eu]|ong|ng?)?|u(e|a?n)?))|
    (([aA](i|o|ng?)?|[oO]u?|[eE](i|ng?|r)?))|
    ([wW](a(i|ng?)?|o|e(i|ng?)?|u))|
    [yY](a(o|ng?)?|e|in?g?|o(u|ng)?|u(e|a?n)?)
    

    这是我创建的Debuggex示例.

    正则表达式可视化

    2023-02-08 15:49 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有