Почему этот PHP preg_replace () не работает? - PullRequest
0 голосов
/ 05 марта 2009

У меня есть несколько плохих записей MySQL, которые мне нужно исправить. Я пытаюсь сделать это в PHP.

Что у меня есть :

a whole bunch of text with no numbers Entry #: 2439 . a whole bunch of text Click here to blah blah blah

Что я хочу :

a whole bunch of text with no numbers Entry #: 2439 . a whole bunch of text <BR><A href="somepage.php?entry_no= 2439 ">Click here to blah blah blah</A>

Мой код PHP :

$fixed = preg_replace('/(.*)(\d*)(.*)(Click here.*)/i',"$1$2$3<BR><A href=\"somepage.php?entry_no=$2\">$4</A>",$originalData);

Почему-то вот что я получаю:

a whole bunch of text with no numbers Entry #: 2439 . a whole bunch of text <BR><A href="somepage.php?entry_no=">Click here to blah blah blah</A>

2 доллара не дают мне номер во второй раз. У кого-нибудь есть идеи?

1 Ответ

6 голосов
/ 05 марта 2009

Это потому, что первый матч жадный:

С учетом этого ввода вот что соответствует каждой части:

a whole bunch of text with no numbers Entry #: 2439. a whole bunch of text Click here to blah blah blah

(.*)    // "a whole bunch of text with no numbers Entry #: 2439. a whole bunch of text "
(\d*)   // "" (0 or more numbers)
(.*)    // "" (0 or more characters)

Все, что вам нужно сделать, это сделать первый матч нежадным:

(.*?)(\d+)(.*)(Click here.*)

Кроме того, так как вы определяете регулярное выражение внутри строки, вам нужно экранировать косые черты:

"/(.*?)(\\d*) ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...