0

我没有为我的问题找到一个好的正则表达式。

我可以有这些字符串:

  • 姓^名^中间名^前缀^后缀
  • 姓^名^^^
  • 姓^名

我搜索一个正则表达式只找到姓氏。另一个正则表达式只找到名字。

我已经尝试过[a-zA-Z'' -]{1,}(?<=\^)(.*?)(?=\^)但我没有匹配我所有案例的正则表达式。

姓氏正则表达式,必须返回第一个字符 '^' 之前的字符串。名字正则表达式必须返回第一个字符 '^' 之后的字符串,并在字符串末尾或下一个字符 '^' 处停止。

目前我不需要检索中间名、前缀和后缀。

4

4 回答 4

1

您可以通过以下方式获取姓氏和名字:

^([^^]+)\^([^^]+)

根据这个regex101

请注意,第一个^是开始的锚点,^后面的[意思是“不是”,其他^的是文字。:-)

于 2013-11-11T22:36:53.007 回答
1

您需要的正则表达式可能是:

/\d+\s:\s([^\^]+)\^([^\^]+)/g

PHP 内部:

$str = "1 : Lastname^Firstname^MiddleName^Prefix^Suffix 2 : Lastname^Firstname^^^ 3 : Lastname^Firstname";

//the 'g' flag doesn't exist in PHP, instead use preg_match_all function:
$regex = "/\d+\s:\s([^\^]+)\^([^\^]+)/"; 

// PHP >= 5.2.2
preg_match_all($regex, $str, $matches);

print_r($matches[1]); //Last names
print_r($matches[2]); //First names
于 2013-11-12T14:51:01.623 回答
0

现在无法测试它,但它应该类似于以下内容:

(\w+)\^(\w+)(\^\w+){0,3}

第 1 组和第 2 组分别返回姓氏和名字。

于 2013-11-11T22:39:29.633 回答
0

考虑以下正则表达式...

姓:^\w*(?=\^)

名:(<=^\w*\^)\w*(?=\^*)

祝你好运!

于 2013-11-11T22:42:21.887 回答