Autor Zpráva
stepanka
Profil *
Ahoj,

mohla bych poprosit o pomoc s regulárním výrazem? Mám řetězce:

D-15-1
A-1-2
E-3-18
B-3-7
B-135-2

tzn. písmeno, pomlčka, číslo, pomlčka, číslo. Potřebovala bych zjistit to prostřední číslo, tedy 15, 1, 3, 3 a 135.

Neuměl by někdo prosím poradit? Už se s tím trápím dlouho.
Moc děkuju!
Tori
Profil
A jak jste to zkoušela? Stačí docela jednoduše: [pomlčka] [1 nebo více znaků, které nejsou pomlčkou] [pomlčka], a tu prostřední část dát do závorky, aby to preg_match vrátil samostatně.
stepanka
Profil *
Tori:
Děkuju za reakci, zkouším to pořád dál, přiznávám se, že metodou pokus-omyl. Už mám:

preg_match('^\-(*)\-$', $dany_retezec, $matches);
echo $matches[0];                        

Pořád to ale hází nějaký Warning, případně to vezme špatně. Budu moc vděčná za pomoc.
Ugo
Profil
stepanka:
ta hvězdička je taková osamocená, chybí jí znak/y který má opakovat, a warning ti to bude hlásit, protože tam nemáš znaky kolem reguláru, první znak (^) taky říká že se jedná o začátek řetězce, čili řetězec v $dany_retezec by musel začínat a končit ($) pomlčkou, zkus : '#\-(.*)\-#' to bude blíže výsledku.
Keeehi
Profil
preg_match('~-(\d+)-~', $dany_retezec, $matches);
echo $matches[1];

Pokud máš těch výskytů v řetězci více, budeš muset použít preg_match_all.
Tori
Profil
stepanka:
Nebo v té závorce může být (\d+) - tzn. "jedna nebo více číslic", nebo ([^-]+) (= "jeden nebo více znaků, které nejsou pomlčkou"). Záleží, jak přesně to chcete/potřebujete definovat.
stepanka
Profil *
Moc vám všem děkuju, použila jsem řešení od Keeehi a funguje parádně. Ještě jednou díky.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: