正则表达式:如何在分隔符之间找到字符串(或不)

时间:2013-11-11 22:20:18

标签: regex

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

我可以拥有这些字符串:

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

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

我试过[a-zA-Z'' -]{1,}(?<=\^)(.*?)(?=\^)但我没有符合我所有情况的正则表达式。

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

目前我不需要检索MiddleName,Prefix和Suffix。

4 个答案:

答案 0 :(得分:1)

您可以使用以下命令获取姓氏和名字:

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

按此regex101

请注意,第一个^是开始的锚点,^表示“not”,[表示“not”,其他^是文字。 : - )

答案 1 :(得分: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

答案 2 :(得分:0)

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

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

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

答案 3 :(得分:0)

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

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

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

祝你好运!