【问题标题】:Regex for picking a Value After "-"用于在“-”之后选择值的正则表达式
【发布时间】:2012-03-14 13:34:44
【问题描述】:

您好,我需要一个正则表达式,它实际上可以获取在“-”破折号之后插入的任何字母,例如我有一个字符串表示

 "UpTown-R" , "Category-C"

我得到的回报是“R”,“C”。

【问题讨论】:

  • 如果破折号后面总是有一个字母,则不需要正则表达式。您可以使用explode,并从每个元素中获取第一个字符。

标签: php regex


【解决方案1】:

如果总是字符串的最后一部分,你可以这样做

/[^-]+$/

here on Regexr

[^-] 是一个匹配所有非破折号的字符类

+ 量词表示前面的一个或多个元素

$ 字符串结尾的锚点

【讨论】:

    【解决方案2】:

    你在这里:

    (?<=-)(.)
    

    结果在第 1 组中。

    测试使用:

    【讨论】:

      【解决方案3】:

      怎么样:

      preg_match('/-([a-z])\b/i', $string, $match);
      

      unicode 兼容性:

      preg_match('/-(\pL)\b/u', $string, $match);
      

      你要的字母在$match[1]

      【讨论】:

        【解决方案4】:

        一个简单的

        -(.+)$
        

        将获得第一次破折号后的所有内容;请注意,使用此字符串foo-bar-baz,您将匹配-bar-baz,而bar-baz 将在第一组中。

        如果你只需要匹配字母,

        -([A-Za-z]+)$
        

        足够了。您的结果将在$1 组中。

        或者,你为什么不substr你的字符串,从最后一个短划线索引开始到字符串的结尾?

        【讨论】:

        • 它将获取从 first 破折号到最后的所有内容,包括破折号 Regexr
        • 从最后开始我的意思是破折号(如果存在)也将在组中。我会更新答案。
        【解决方案5】:

        试试这个正则表达式;

        /^.*\-(.*)$/
        

        这样你就可以在破折号之后得到所有东西

        【讨论】:

          【解决方案6】:

          您为什么要为此使用慢速正则表达式,为什么不直接在“-”上分解字符串?

          $str = 'UpTown-R';
          $arr = explode('-',$str);
          $letter = $arr[1];
          $letterSage = $arr[1][0]; // to be sure you only get 1 character.
          

          这同样有效!在到处写正则表达式之前,想想这些明智的话:“如果你的解决方案包含超过 3 个正则表达式,那么你就是问题的一部分”

          【讨论】:

            猜你喜欢
            • 2017-06-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-06-23
            • 1970-01-01
            • 2021-10-23
            • 1970-01-01
            • 2011-06-18
            相关资源
            最近更新 更多