Разделить строку между двумя символами? - PullRequest
1 голос
/ 05 декабря 2009

Хорошо, это должно быть невероятно легко, но я не знаю, что я ищу ...

Я хочу разбить строку между двумя символами

$string = "blah blah blah (blorp) blah blah (bloop) blah blah (bam)";

retruns :

array
1 -> blorp
2 -> bloop
3 -> bam

Мне не нужны бла-бла, только все в скобках.

Спасибо!

Arthur

Ответы [ 5 ]

5 голосов
/ 05 декабря 2009

Вы можете сделать это с помощью регулярного выражения:

$string = "blah blah blah (blorp) blah blah (bloop) blah blah (bam)";
preg_match_all("/\((.*?)\)/", $string, $result_array);

print_r( $result_array[1] ); // $result_array[0] contains the matches with the parens

Это выдаст:

Array
(
    [0] => blorp
    [1] => bloop
    [2] => bam
)

Мое регулярное выражение использует не жадный селектор: (.*?), что означает, что оно будет захватывать как можно меньше. Это удерживает его от съедания всего ) и захвата всего между открывающим ( и заключительным ) как можно большим количеством слов.

2 голосов
/ 05 декабря 2009

все с использованием регулярных выражений, вот один без регулярных выражений

$string = "blah blah blah (blorp) blah blah (bloop) blah blah (bam)";
$s = explode(")",$string);
foreach ( $s as $k=>$v ){
    $m= strpos($v,"(" );
    if ($m){
        print substr( $v, $m+1  )  . "\n"  ;
    }
}
2 голосов
/ 05 декабря 2009

Вы можете использовать preg_match_all с чем-то вроде (просто быстрый набросок ...):

preg_match_all("|\([^)]+\)|", $string, $result_array);
1 голос
/ 05 декабря 2009

http://php.net/manual/en/function.preg-match-all.php

$matches = array();
$num_matched = preg_match_all('/\((.*)\)/U', $input, $matches);
1 голос
/ 05 декабря 2009

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

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