Autor Zpráva
Radovan789
Profil *
Zdravím,
vytvořil jsem si tento reg. výraz:

^[^0-9](.+)-([0-9]+)$

pro tento výraz vyhovuje:
text-3

nevyhovuje:
477-text

(což funguje podle očekávání)

Jak bych mohl tento výraz upravit tak aby vyhovovali i tyto stringy:
text6440-3
t-3


Pravidla: string nesmí začínat číslem (musí začinát písmenem). String musí mít před pomlčkou 1 a více znaků (první znak musí být písmeno podle prvního pravidla).

Předem děkuji za rady.
Tori
Profil
Radovan789:
string nesmí začínat číslem (musí začinát písmenem).
To jsou dvě celkem různé věci. :) Výše uvedeným regulárem by imho prošlo i "---text". Písmena mohou být s diakritikou nebo jen bez? (píšu bez):
~^([a-z].+?)-([0-9]+)$~i   // pro preg_match. Syntax pro ereg() si nepamatuju, nepoužívám.
Radovan789
Profil *
PHP Code Example: 
<?php
$sourcestring="t-3";
preg_match('~^([a-z].+?)-([0-9]+)$~i',$sourcestring,$matches);
echo "<pre>".print_r($matches,true);
?>
 
Matches Found:
NO MATCHES.

Děkuji za snahu ale nevyhovuje pro string t-3
A nerozumím tomu proč používat ~ místo /
Kajman
Profil
Tori:
.+?
Nejsem si jistý, co udělají dva kvantifikátory po sobě, ale spíše tam má být .*, aby prošlo i t-3.
Radovan789
Profil *
Kajman:
Počítám-li správně tak jsou tři po sobě.

Toriho příklad je pro moje zadání neplatný...Neví někdo jak by to mělo být?


Kajman:
Tak teda dva... jsem se spletl.
Tori
Profil
Kajman:
Pravda, mělo být "0 a více", díky. ~^([a-z].*)-([0-9]+)$~i

Nejsem si jistý, co udělají dva kvantifikátory po sobě
+ nebo * samotné najdou max.počet odpovídajících znaků, +? nebo *? najde min.počet odpovídajících znaků. Taky se to dá přepnout modifikátorem "U" - potom to s otazníkem funguje přesně naopak. Ale tady to bylo zbytečné, uznávam, spíš se to hodí pro nalezení více výskytů preg_match_all('~\[tag\].*?\[/tag\]~is', $text, $m);.
Radovan789
Profil *
Tori:
Děkuju

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: