[regexp] Pomoc przy znalezieniu odpowiedniego wyrażenia

0

Witam, mam tekest typu:

<b>jakis atrybut:</b> jakas wartosc
atrybut 	wartosc
atrybut	wartosc

czasami z dwukropkiem na koncu atrybutu czasami bez potrzebuje wydobyc przy pomocy wyrazen regularnych atrybuty i wartosc

probowalem

(<b>)?(.*)(</b>)?[/s/t](.*)

jednak nie dziala tak jak bym chcial :(

0

podpowiedź: za dużo nawiasów, nie w tę stronę i za mało ukośników

0

a no i jeszcze "zbyt pazerne" to wyrażenie jeśli chcesz wyłapać więcej niż jedną parę - podpowiedź: "?" przed końcem nawiasu

0

ok ale nadal jakos nie moge sobie poradzic, moze jakas wieksza podpowiedz ?

0

Powinieneś jakoś ujednolicić zapis, bo w taki sposób będzie ciężko.
Przede wszystkim nazwa atrybutu powinna tworzyć pojedynczy wyraz ewentualnie z użyciem znaków _ i -.
W takim przypadku będzie to wyglądało tak:
^(?:(?:<b>([a-zA-Z0-9_-]+)(?::?)</b>)(?:\s+)(.*))$ - to dla wyrażeń z tagami B
^(?:(?:([a-zA-Z0-9_-]+)(?::?))(?:\s+)(.*))$ - bez tagów
Dodatkowo można obydwa wyrażenia połączyć sumą logiczną |

0

jagi: jesteś wielki :)
lekko zmodyfikowane i polaczone dla potomnych:

^(?:(?:<b>(.*)(?::?)</b>)(?:\s+)(.*))$|^(?:(?:(.*)(?::?))(?:\s+\t+)(.*))$

(.*) zamiast ([a-zA-Z0-9_-]+) poniewaz atrybut moze byc wielowyrazowy
oraz (?:\s+\t+) zamiast (?:\s+) bo czesto zamiast spacji pojawiaja sie taby

generalnie dzieki dziala jak chcialem :)

// dodano:
mała poprawka:
^(?:(?:<b>([\w\s\t\.]+)(?::?)</b>)(?:\s+)(.*))$|^(?:(?:([\w\s\t\.]+)(?::?))(?:\s+\t+)(.*))$

1 użytkowników online, w tym zalogowanych: 0, gości: 1