【问题标题】:Match rest of string with regex用正则表达式匹配字符串的其余部分
【发布时间】:2012-01-22 07:11:20
【问题描述】:

我有一个这样的字符串

ch:keyword
ch:test
ch:some_text

我需要一个匹配所有字符串的正则表达式,但是,它不能匹配以下内容:

ch: (ch: is proceeded by a space, or any number of spaces)
ch: (ch: is proceeded by nothing)

我可以推断出带有 'ch:' 的字符串的长度。 任何帮助,将不胜感激;我正在使用 PHP 的 preg_match()

编辑:我试过这个:

preg_match("/^ch:[A-Za-z_0-9]/", $str, $matches)

但是,这只匹配字符串后面的 1 个字符。我尝试在右方括号后放一个 *,但这匹配空格,我不想要。

【问题讨论】:

  • 你可能已经尝试了一些东西,你能先展示一下吗..!
  • 为什么你认为你需要一个正则表达式? explode()if-statement 将是一种更易读的方法。
  • 他需要正则表达式,因为这就是它们存在的目的。

标签: php regex string


【解决方案1】:
preg_match('/^ch:(\S+)/', $string, $matches);
print_r($matches);

\S+ 用于匹配 1 个或多个非空格字符。这应该适合你。

【讨论】:

    【解决方案2】:
    $str = <<<TEXT
    ch:keyword
    ch:test
    ch:
    ch:some_text
    ch: red
    TEXT;
    
    preg_match_all('|ch\:(\S+)|', $str, $matches);
    
    echo '<pre>'; print_r($matches); echo '</pre>';
    

    输出:

    Array
    (
        [0] => Array
            (
                [0] => ch:keyword
                [1] => ch:test
                [2] => ch:some_text
            )
    
        [1] => Array
            (
                [0] => keyword
                [1] => test
                [2] => some_text
            )
    
    )
    

    【讨论】:

      【解决方案3】:

      试试这个正则表达式:

      ^ch:\S.*$
      

      【讨论】:

      • 谢谢,这似乎是最简单的方法。
      • @user1015599,不客气。考虑投票或接受答案。
      • @Kirill:我认为这个答案是不正确的,因为这只会匹配一个非空格字符,而要求是匹配一个单词 - 你给了 \S 而它应该是 \S+。 ..检查我发布的答案。
      【解决方案4】:

      试试这个:

      preg_match('/(?<! +)ch:[^ ].*/', $str);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-15
        • 2012-11-25
        • 2015-10-25
        • 1970-01-01
        相关资源
        最近更新 更多