Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Wyrażenia regularne - zaprzeczenie?
Forum PHP.pl > Forum > Przedszkole
krzywy36
Chcę z tekstu wyciągnąć wszystkie wystąpienia "{ ...coś... }" takie, że ...coś... nie zawiera znaku "{".
Próbowałem z czymś takim:
  1. preg_match('/\{[^\{]*}/', $test);

czyli jak ja to rozumiem: "dowolna ilość znaków różnych od "{", pomiędzy nawiasami klamrowymi", ale nie działa ;<
tolomei
Bardzo ciężka sprawa...
Na stackoverflow nawet mówią, że się nie da.
Inni podają jakieś przykłady, które nie nadają się dla Twojego problemu...

Sam dopracowałem się czegoś takiego(przez ostatnie dwie i pół godziny):
  1. <?php
  2. $str = '{abcd}{ef{gh}{ijkl}{mnop}{rst{u}';
  3.  
  4. preg_match_all('/\\{([^\\{]*?(?!\\{)[^\\{]*?)(?(1)}|\\{[^}]+?})/', $str, $out);
  5.  
  6. echo '<pre>';
  7. print_r($out);
  8. echo '</pre>';


Jeszcze jutro spróbuję.

Może ktoś jeszcze ma jakiś pomysł ?

Pozdro.

PS. Musisz wstawić podwójny znak ucieczki - raz dla PHP, a drugi raz dla PCRE.
Shido
Moze olać w wyrazeniu to { i pobrać wszystko co pasuje niezaleznie czy posiada ten znak czy nie. Potem np. Za pomocom strpos() posprawdzac czy jest { jezeli jest to niech nic nie robi ( lub usunie zmienna ktora zawiera ten tekst ) a jezeli nie ma to niech coś tam robi.
krzywy36
@tolomei po kilku testach widzę, że Twój sposób działa, więc co z nim nie tak (może poza estetyką)? wink.gif a podwójnych znaków ucieczki nie wstawia się jak używasz cudzysłowów zamiast apostrofów?
tolomei
Witam ponownie.

W tej na wyjściu masz tak:


[0] => {abcd}
[1] => {gh}
[2] => {ijkl}
[3] => {mnop}
[4] => {u}


a myślałem że chcesz taki efekt:


[0] => {abcd}
[1] => {ijkl}
[2] => {mnop}


Z tymi znakami ucieczki oczywiście masz rację... Zbyt późno było chyba dla mnie wczoraj smile.gif

Powodzenia !
krzywy36
jest dobrze, tak chciałem smile.gif wielkie dzięki za pomoc.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.