[regexp] Pomoc przy znalezieniu odpowiedniego wyrażenia

[regexp] Pomoc przy znalezieniu odpowiedniego wyrażenia
nediam
  • Rejestracja: dni
  • Ostatnio: dni
0

Witam, mam tekest typu:

Kopiuj
<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

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

jednak nie dziala tak jak bym chcial :(

  • Rejestracja: dni
  • Ostatnio: dni
0

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

  • Rejestracja: dni
  • Ostatnio: dni
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

nediam
  • Rejestracja: dni
  • Ostatnio: dni
0

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

JA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 308
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ą |

nediam
  • Rejestracja: dni
  • Ostatnio: dni
0

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

Kopiuj
^(?:(?:<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+)(.*))$

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.