【问题标题】:Regex: how to find string between separator (or not)正则表达式:如何在分隔符(或不)之间查找字符串
【发布时间】:2013-11-11 22:20:18
【问题描述】:

我找不到适合我的问题的正则表达式。

我可以有这些字符串:

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

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

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

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

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

【问题讨论】:

  • 您使用哪种语言?
  • @bashophil 我猜是 PHP,但不确定...

标签: regex


【解决方案1】:

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

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

根据这个regex101

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

【讨论】:

    【解决方案2】:

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

    /\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
    

    【讨论】:

      【解决方案3】:

      目前无法测试,但应该如下所示:

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

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

      【讨论】:

        【解决方案4】:

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

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

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

        祝你好运!

        【讨论】:

          猜你喜欢
          • 2010-10-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-01-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多