Basit regex soru: Nasıl ilk parantez bulmak ve içine içerik almak için?

5 Cevap php

I'm new to regex with PHP. How can I find the contents of the first parentheses with a string that is a couple of paragraphs long.

Ben preg_match fonksiyonunu kullanmak zorunda varsayarak yaşıyorum

5 Cevap

gerek regex, sadece normal PHP string fonksiyonları

$str = "

yada yada yada
yada
yada yada
yada (bada bada
bada bada

bada) yada yada yada
yada yada
yada yada yada
( yo yo )
";

$s = explode(")",$str,2);
$what_i_want=$s[0];
$m = strpos($what_i_want,"(");  #find where opening brace is
print substr($what_i_want,$m+1); #print from opening brace onwards

Sürece eşleşen parantez desteklemek istemiyorum gibi, "/\\(([^()])\\)/" bunu yapacağız.

Eğer keyfi iç içe Pars desteklemek istiyorsanız, kısa cevap yapamazsın ki. Bu regexes iç içe Pars (context-free diller) olan dizeleri tür yakalamak edemez gerçeğinden kaynaklanmaktadır. Bunu yapmak için ayrıştırıcı kütüphane çeşit gerekir. Ancak yukarıda basit sürüm çoğu için sadece iyi çalışması gerekir.

preg_match("/^.*?\(([^\)]+)\)/", $search_this_string, $matches, PREG_OFFSET_CAPTURE);
print_r($matches);

Bu parantez alıntı dize herhangi bir (bir şekilde) kapanış Pars kaçan içermiyor varsayar.

<?php
$str = "The quick (brown fox) jumps (over) the (lazy) dog.";
$first_match = preg_replace('/.*?\((.+?)\).*/', '$1', $str);
var_dump($first_match);

string (9) "kahverengi tilki"

Not: İç içe parantez çalışmaz.

$s = "

yada yada yada
yada
yada yada
yada (bada bada
bada bada

bada) yada yada yada
yada yada
yada yada yada
( yo yo )
";

preg_match('/\((.*?)\)/ms', $s, $m);
print_r($m[1]);

Gebelik maç desen sonunda, '/\((.*?)\)/ms', 'm', satırlı diyor, ve 's' "nokta çok yeni satır anlamına edelim" diyor.