проблемы с preg_match PHP - PullRequest
       7

проблемы с preg_match PHP

0 голосов
/ 24 декабря 2011

У меня есть строка:

$str="(94896)content is here(/94896)(94897)content is here(/94897)(94898)content is here(/94898)(94899)content is here(/94899)";

(number) и (/number) действуют как теги для извлечения определенного содержимого из строки.

и у меня есть preg_matchчтобы извлечь содержимое:

if(preg_match('/(94896)\"(.*)\"(\/94896)/',$str,$c)) {echo "I found the content, its:".$co[1];} 

Теперь по какой-то причине он не находит соответствия в строке ($str), хотя его явно нет ....

Любые идеи о том, что я делаю здесь не так?

Ответы [ 3 ]

2 голосов
/ 24 декабря 2011

Вам необходимо извлечь двойные кавычки из строки регулярного выражения, поскольку они не отображаются в $ str, но ожидаются регулярным выражением.

'/(94896)\"(.*)\"(\/94896)/'
//       ^^    ^^
//        These aren't in the string.

РЕДАКТИРОВАТЬ: Я думаю, что вам также нужно экранировать скобки, так как они будут считываться как операторы группировки, а не как фактические скобки.

Ваше выражение должно быть:

'/\(94896\)(.*)\(\/94896\)/'
1 голос
/ 24 декабря 2011

Круглые скобки используются в регулярных выражениях для обозначения подшаблонов.Если вы хотите найти эти символы в строке, вы должны экранировать их:

preg_match('/\(94896\)(.*)\(\/94896\)/',$str,$c)

Если шаблон найден:

echo "I found the content, its:".$c[0];

О, и, как говорит Карл Николл, почемуцитаты в вашем образце?

0 голосов
/ 24 декабря 2011

Для соответствия всему контенту:

$str="(94896)content is here(/94896)(94897)content is here(/94897)(94898)content is here(/94898)(94899)content is here(/94899)";

$re = '/\((\d+)\)(.*)\(\/\1\)/';
preg_match_all($re, $str, $matches,PREG_SET_ORDER);
var_dump($matches);

Номер будет в $matches[*][1], контент в $matches[*][2].

...