regexp freebie ...我该怎么做?

时间:2011-02-05 00:23:41

标签: php regex preg-match

这样做的正确方法是什么?

<?php
$word = 'dogcatdog';
preg_match( '/do'."[^0-9]".'atdog/i', $word, $matches );
print_r($matches);
?>

我想要返回“gc”。

我一直收到错误:“未知修饰符'['”。

5 个答案:

答案 0 :(得分:4)

好吧,如果两条狗围着一只猫,我们可以观察到的第一件事就是猫会开始嘶嘶声,这会产生一个&#34; Hsssss&#34;。然后狗会开始吠叫和咆哮,这给了我们一个&#34; Grrr Grrr BARK&#34;。因此,这将产生类似于&#34; Hsssss Grrr Grrr Hsssss BARK BARK Hsssss Grrr&#34;。所以现在,记住我们想要&#34; gc&#34;作为我们的最终结果,我们应用以下

$word = 'dogcatdog';
preg_match("[r]+", $word, $matches);
preg_match("(BARK)", $word, $matches);
preg_match("[Hs]+", $word, $matches);
$matches = "c";
preg_match("[G]+", $word, $matchesFinal);
$matches =  $matchesFinal[0] . $matches;

和presto!

答案 1 :(得分:1)

preg_match( '/do([a-z]{2})atdog/i', $word, $matches );

如果你想要找到[^0-9],那么你永远不会gc。这只是找到任何非数字字符,所以包括所有标点符号,除了0..9之外的所有内容。

当然,如果你真的只是希望在字符串中匹配gc,那么你就可以。

preg_match( '/do(gc)atdog/i', $word, $matches );

然而,这似乎毫无意义。

答案 2 :(得分:0)

我不知道具体的PHP语法,但试试这个:

preg_match( '/do([^0-9]+)atdog/i', $word, $matches );

答案 3 :(得分:0)

(示例中的字符串语法错误。)

如果您想捕获某些内容,则需要将其括在( paranthesis )中。

preg_match( '/do([^0-9]+)atdog/i', $word, $matches );

在这种情况下,gc会出现在$matches[1]中。结果数组始终由捕获括号枚举。

这里有一个很好的工具列表,可以帮助构建正则表达式,对入门很有用:https://stackoverflow.com/questions/89718/is-there-anything-like-regexbuddy-in-the-open-source-world

答案 4 :(得分:0)

试试这个,我纠正了你的语法错误:

<?php
$word = 'dogcatdog';
preg_match("/do([^0-9]+)atdog/i", $word, $matches);
print_r($matches);
?>