Что не так в моем регулярном выражении? - PullRequest
0 голосов
/ 20 октября 2011

Мне нужно получить из строки ниже только эти части: Джони, Смит и example-free@wpdevelop.com

, которые, как вы можете видеть, находятся между ^ и ~.

text^name1^Jony~text^secondname1^Smith~text^email1^example-free@wpdevelop.com~

для этого я попытался:

preg_match_all ('/\^(.*?)\~/', $row['form'], $res);

Для отображаемого имени: ^ name1 ^ Jony ~ для второго имени: ^ secondname1 ^ Smith ~ и электронная почта: ^email1^example-free@wpdevelop.com~

Как видите, слово "текст" уже исчезло, но не ^, name1, secondname1, email1 и ~

Можете ли вы сказать мне, что не так в моем регулярном выражении?

Ответы [ 3 ]

3 голосов
/ 20 октября 2011

изменить .* на [^^]* означает «Любой символ , исключая ^»

<?php
$str = 'text^name1^Jony~text^secondname1^Smith~text^email1^example-free@wpdevelop.com~';

preg_match_all ('/\^([^^]*?)\~/', $str, $res);

var_dump($res);

/*
//output 

$ php scratch.php
array(2) {
  [0]=>
  array(3) {
    [0]=>
    string(6) "^Jony~"
    [1]=>
    string(7) "^Smith~"
    [2]=>
    string(28) "^example-free@wpdevelop.com~"
  }
  [1]=>
  array(3) {
    [0]=>
    string(4) "Jony"
    [1]=>
    string(5) "Smith"
    [2]=>
    string(26) "example-free@wpdevelop.com"
  }
}
*/
1 голос
/ 20 октября 2011

Это лучше:

<?php

$string = 'text^name1^Jony~text^secondname1^Smith~text^email1^example-free@wpdevelop.com~';

preg_match_all('/\^.+?\^(.+?)~/', $string, $matches);

var_dump($matches);

Результат в $ совпадений будет:

array(2) {
  [0]=>
  array(3) {
    [0]=>
    string(12) "^name1^Jony~"
    [1]=>
    string(19) "^secondname1^Smith~"
    [2]=>
    string(35) "^email1^example-free@wpdevelop.com~"
  }
  [1]=>
  array(3) {
    [0]=>
    string(4) "Jony"
    [1]=>
    string(5) "Smith"
    [2]=>
    string(26) "example-free@wpdevelop.com"
  }
}

Я добавил эту часть. +? \ ^ К регулярному выражению, она соответствует тексту между двумя символами ^.

1 голос
/ 20 октября 2011

Ваше регулярное выражение должно быть '/\^([^\^]*?)\~/', вы используете ., который выбирает ^.Вам не нужно выбирать ^, используя [^\^] вместо ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...