Регулярное выражение - проблема с разделителями в PHP - PullRequest
0 голосов
/ 14 декабря 2010

Я пытаюсь извлечь атрибуты src из: [attname src = "http://example.org"] somecontent [attname src =" http://www.example.com"]

Что у меня сейчас:
preg_match_all('#attname src=".*[^"]#', $buffer, $bufferarr);

Однако это не работает - нет остановки после секунды ", что приводит к: attname src="http://example.org"] somecontent [attname src="http://www.example.com

Ответы [ 3 ]

2 голосов
/ 14 декабря 2010

По умолчанию + и * являются "жадными" - они сжигают столько символов, сколько могут. Вот почему вы получаете больше, чем хотите. Если вы добавите к ним ? (+? и *?), они будут не жадными и остановятся, как только смогут.

Ваше регулярное выражение также выглядит неправильно. Это должно быть что-то вроде #attname src="[^"]*?"#.

1 голос
/ 14 декабря 2010
preg_match_all('#attname src="([^"]*)"#', $buffer, $bufferarr);
0 голосов
/ 14 декабря 2010

Не лучшее решение, но в любом случае оно выполнит свою работу:

$str = '[attname src="http://example.org"] somecontent [attname src="http://www.example.com"]';
preg_match_all('/attname src=\"(.*?)\"/', $str, $match);
var_dump($match);
...