Взимане на всичко, след тире

confiscate

Registered
Здравейте,

Ако имам някакъв подобен стринг:
Код:
$string ="Bulgaria - Sofia Anglia-London";

Мога ли да взема всичко, което се намира след тиретата, тоест: Sofia London ?

Прочетох, че става с този регулярен израз , но не ми е ясно точно как.
http://regexr.com/30apc

Направих нещо такова, но винаги взима най-последния елемент. Тоест в случая London.



Код:
$pattern = '/[^-]+$/';
   $test = preg_match($pattern, $string,$matches);
    var_dump($matches);

Благодаря предварително!
Поздрави
 
Регулярните изрази не са за това, те са за "по-яки" търсения :D За този пример може да ползваш функцията explode() .

PHP:
$str = "Bulgaria - Sofia Anglia-London";
$explode = explode("-",$str);
//Bulgaria, Sofia Anglia,London
// $explode[0] = Bulgaria
//$explode[1] = Sofia Anglia
//$explode[2] = London
echo $explode[1] . " -> ". $explode[2];
echo "<hr> all: ".print_r($explode);

Примерно нали, от там как ще си филтрираш информацията зависи от теб тъй като не си казал нищо по въпроса :) :?:
 
Нямаш нужда от масиви...
Една елементарна функция strstr е точно за целта:

PHP:
$string ="Bulgaria - Sofia Anglia-London";
$get = substr (strstr($string, '-'), 1);

strstr взима тази част от стринга, която започва с дадения символ, в случая тире
substr взима от стринга всичко от втория символ нататък (започваме от 0, затова съм написал 1)
http://php.net/manual/en/function.substr.php
http://php.net/manual/en/function.strstr.php


Олеле... много съм застрелян. Та ти питаш за съвсем друго.

Ей така работи, като получаваш името на града в масива $cities:

PHP:
$string ="Bulgaria - Sofia Anglia-London";
preg_match_all('/\-\s*(\w+)/', $string, $matches);
array_shift($matches);
$cities = $matches[0];

print_r($cities);

/* Result:

	Array
	(
    	[0] => Sofia
    	[1] => London
	)
*/
:) :?:
 
Колега, ето това ще ти свърши работа. :?:
PHP:
<?php
$string ="Bulgaria - Sofia Anglia-London";
$arr = explode("-",$string);
foreach($arr as $k => $v)
{
	echo "<br>Key: ".$k." Value: ".$v;
}
?>
 
Този регулярен израз може да ти оимогне
Код:
[-]\s*\w+
Той търси "-" следвано от 0 или повече whitespaces следвано от един или почевече символи.
Но няма да свърши работа ако имаш следното
Код:
Bulgaria - SofiaAnglia-London

Може би ще имаш проблем ако в името на града има спейсове и ще трябва да се използва някакъв разделител, примерно ";"
Код:
Bulgaria - Sofia;  Anglia-London; Test-Three word town ;
Тогава regex-а е:
Код:
[-]\s*[\w\s]+\s*[;]
В такъв случай може и тирето да отпадне:
Код:
[\w\s]+\s*[;]

И използвай: preg_match_all
 

Back
Горе