2012-06-28 16 views
7

To naprawdę prosty problem, ale nie mogłem znaleźć rozwiązania w dowolnym miejscu.PHP/REGEX: Pobierz ciąg w nawiasach.

Próbuję użyć preg_match lub preg_match_all, aby uzyskać ciąg z nawiasów, , ale bez nawiasów.

Dotychczas moje wyrażenie wygląda następująco:

\([A-Za-z0-9 ]+\) 

i zwróci następujący wynik:

3 (pusty podświetlenia) 928-129 (< - oryginalny łańcuch)

(pusty fragment) (< - wynik)

Co chcę, to ciąg w nawiasach, ale bez nawiasów. to będzie wyglądać następująco:

wydrążony kulminacyjnym

prawdopodobnie mógłbym wymienić nawiasów potem z str_replace czy coś, ale to nie wydaje się być bardzo eleganckie rozwiązanie dla mnie.

Co muszę dodać, aby nawiasy nie zostały uwzględnione w wyniku?

Dzięki za pomoc, jesteście świetni! :)

+0

Co Dzwonisz wsporniki są rzeczywiście nawiasach. – JohnK

+2

Możliwy duplikat [PHP: Najlepszy sposób na wyodrębnienie tekstu w nawiasach?] (Https://stackoverflow.com/questions/196520/php-best-way-to-extract-text-within-parenthesis) – EdChum

Odpowiedz

12

Wystarczy dodać przechwytywanie nawias, oprócz swojej ucieczce nawiasach.

<?php 
    $in = "hello (world), my name (is andrew) and my number is (845) 235-0184"; 
    preg_match_all('/\(([A-Za-z0-9 ]+?)\)/', $in, $out); 
    print_r($out[1]); 
?> 

This wyjścia:

Array ([0] => world [1] => is andrew [2] => 845) 
+0

Dziękuję za odpowiedź. Działa to świetnie (poza ucieczkowymi ukośnikami). Ale w jaki sposób pomagają zamki? Myślałem, że moja wypowiedź została odczytana w ten sposób: "otwarty nawias, a następnie liczba znaków składających się z liter, cyfr i spacji, po których następuje nawias zamknięty". W jaki sposób wchodzą tutaj klamry (niezamknięte)? Dziękuję za pomoc! :) – Macks

+1

Ups, przepraszam za ucieczkę z backslashes; Naprawiono teraz. Nieumieszczone nawiasy mają specjalne znaczenie: przechwytywanie. Domyślnie, cały mecz jest przechwytywany do '' [0] '', dlatego '' $ out [0] '' zawiera wszystko, nawet nawiasy, których nie chcesz. Każde ''() '' przechwytuje, cóż, _ zatrzymuje/cokolwiek jest pomiędzy nimi i przechowuje je w sekwencyjnych wskaźnikach tablicowych, tj. '' [1] '', '' [2] '', '' [3] '', itp.Na przykład, jeśli Twój ciąg znaków to "abc123def456", a regex to ''/abc (\ d +) (\ w +) (\ d) (\ d +)/'', twoje przechwyty będą takie jak: '' [1] '' = "123", '' [2] '' = "def", "' [3] '' = "4" i "' [4] '' = "56". –

+0

Różnica między '' preg_match'' i '' preg_match_all'' jest taka, że ​​ta ostatnia, jak sama nazwa wskazuje, pasuje do wszystkich, tak że w tablicy będzie tablica: '' [1] = {"world" , "is andrew", "845"} ". –

22

try:

preg_match('/\((.*?)\)/', $s, $a); 

wyjściowa:

Array 
(
    [0] => (hollow highlight) 
    [1] => hollow highlight 
) 
+0

Dziękuję za Twoje Wsparcie! :) – Macks

+0

dzięki temu zadziałało dla mnie – itsandy

+0

Naprawdę uratowałeś mój dzień :) – Hossein