匹配正则表达式与字符串的其余部分

3
我有一个类似这样的字符串
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个字符。我尝试在闭合方括号后面加上*,但这会匹配空格,而我不想要。


1
你可能已经尝试了一些东西,能先给我展示一下吗? - Sudhir Bastakoti
你为什么认为需要正则表达式?使用 explode() 函数和 if 语句会更易读。 - johnsyweb
2
他需要正则表达式,因为这就是它们存在的原因。 - dfsq
4个回答

4
preg_match('/^ch:(\S+)/', $string, $matches);
print_r($matches);

\S+用于匹配一个或多个非空格字符。这应该对您有帮助。


3
尝试使用这个正则表达式:
^ch:\S.*$

1
谢谢,这似乎是最简单的方法。 - q3d
@Kirill:我认为这个答案是错误的,因为它只匹配一个非空格字符,而要求是匹配一个单词-您已经给出了\S,而应该是\S+...请检查我发表的答案。 - Ninja

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
        )

)

0

尝试使用这个:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接