【问题标题】:preg_split() Regex for Initials Lastnamepreg_split() 首字母姓氏的正则表达式
【发布时间】:2012-09-18 10:35:06
【问题描述】:

我有一个如下所示的名称模式:

F。 O.O.酒吧
F. Oobar
F.O.奥巴

我目前正在尝试开发一个正则表达式,让我可以根据其中一个拆分名字,也许是首字母和姓氏。

foreach($authors as $author) {
    $arr = preg_split("/([a-zA-Z]. )+/", $author, -1, PREG_SPLIT_DELIM_CAPTURE);
    //Do stuff with $arr
}

但是,这也会拆分Foo. Bar(或者准确地说是o.)。问题是我不能只将它限制为小写,因为我收到的数据非常不一致,所以我不能依赖这个。

【问题讨论】:

  • 我刚刚注意到您使用的是preg_split,但您想匹配吗?你真正想要什么
  • @TimPietzcker 匹配是错误的单词选择,我确实想拆分。我有一个姓名列表,我需要将它们拆分以便将它们存储在需要为名字(首字母)和姓氏单独条目的数据库中。

标签: php regex preg-split


【解决方案1】:

. 必须被转义。

$arr = preg_split("/([a-zA-Z]\. )+/", $author, PREG_SPLIT_DELIM_CAPTURE);

【讨论】:

  • 也谢谢你,这导致了一个我也没有注意到的错误。
【解决方案2】:

你的意思是你只想在点之前允许一个字母?使用单词边界来确保这一点:

$arr = preg_split("/\b([a-zA-Z]\. )+/", $author, PREG_SPLIT_DELIM_CAPTURE);

此外,正如错误正确指出的那样,点需要转义。

【讨论】:

  • 这正是我所需要的。谢谢!
猜你喜欢
  • 1970-01-01
  • 2016-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多