регулярное выражение халява ... как мне это сделать? - PullRequest
1 голос
/ 05 февраля 2011

Как правильно это сделать?

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

Я хочу вернуть "gc".

Я получаю сообщение об ошибке: "Неизвестный модификатор '['".

Ответы [ 5 ]

4 голосов
/ 05 февраля 2011

хорошо, если две собаки окружают кошку, первое, что мы можем наблюдать, это то, что кошка начнет сильно шипеть, это выдает «Hsssss». Тогда собаки начнут много лаять и рычать, это дает нам «Гррр Гррр КАРК». Таким образом, вместе мы получим что-то вроде "Hsssss Grrr Grrr Hsssss BARK BARK Hsssss Grrr". Итак, теперь помните, что мы хотим, чтобы "gc" как наш конечный результат, мы применяем следующее

$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 голос
/ 05 февраля 2011
preg_match( '/do([a-z]{2})atdog/i', $word, $matches );

Если вы получите его, вы никогда не сделаете [^0-9], если вы пытаетесь найти gc.Это будет просто поиск любого нецифрового символа, поэтому будет включать все знаки препинания, ну что угодно, кроме 0..9.

Конечно, если вы действительно просто хотите соответствовать gcв строке, вы бы сделали.

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

Однако это кажется довольно бессмысленным.

0 голосов
/ 05 февраля 2011

Попробуйте, я исправил ваши синтаксические ошибки:

<?php
$word = 'dogcatdog';
preg_match("/do([^0-9]+)atdog/i", $word, $matches);
print_r($matches);
?>
0 голосов
/ 05 февраля 2011

(Синтаксис строки в вашем примере был неверным.)

Если вы хотите захватить что-то, вам нужно заключить это в ( 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

0 голосов
/ 05 февраля 2011

Я не знаю определенного синтаксиса PHP, но попробуйте это:

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