hoi,

sinds kort ben ik begonnen met reguliere expressies. Nu wil ik bv uit de volgende variabele:

$var = 'test "dinges en nog wat 1234" blah "foo bar"'

het volgende als resultaat krijgen:

$result=array(
                     'dinges en nog wat 1234',
                     'foo bar'
                    )


iemand een ideetje? dit moet toch mogelijk zijn met preg_match of niet?
zeker: "([^"]+)"
Dus iets als:
<?php

$str = 'test "dinges en nog wat 1234" blah "foo bar"';

$regEx = '#"([^"]+)"#';

if(preg_match_all($regEx, $str, $matches)){
	print_r($matches[1]);
}else echo 'Niets gevonden in $str';

?>

UITVOER:

Array
(
    [0] => dinges en nog wat 1234
    [1] => foo bar
)



http://www.gskinner.com/RegExr/
Maar het hoeft niet met een regex :-)

function getQuoted($var) {
	for($ret = array(),
		$parts = explode('"', $var),
		$i = 0;

		isset($parts[$i + 1]);

		++$i
	) {
		if ($i & 1) {
			$ret[] = $parts[$i];
		}
	}
	return $ret;
}
Je weet toch zelf ook wel dat Explode de minst bruikbare manier is voor dit soort dingen?

EDIT: Zie de edit van mijn vorige bericht met werkende php code..
En je weet toch hopelijk dat dat onzin is?

Zie mijn functie die precies hetzelfde doet...
ha merci hipska ;) just wat ik nodig had!

Zou je ev enige verklaring kunnen geven voor je regex? zodat ik er ook aan uit kan :p
Zeker: "(^")+"

" : matcht een " in het begin
(^")+ : matcht één of meerdere tekens (neem een * ipv + voor 0 of meerdere tekens)
^" : tekens mogen niet een " zijn

dus alles samen, match een stuk tekst dat tussen 2 " staat en erin mogen geen " staan.
bedankt!
Hipska schreef op 07.01.2010 13:30
Je weet toch zelf ook wel dat Explode de minst bruikbare manier is voor dit soort dingen?

EDIT: Zie de edit van mijn vorige bericht met werkende php code..

Leg dan effe uit waarom dat is?
Tekst functies zijn eigenlijk per definitie beter dan intensieve regexen.
Als je zoiets simpels wilt doen als dit moet je zeker geen regex gebruiken.

Reageren