2013-09-10 3 views
-1

Входная строка:Исключить данные из скобок с использованием регулярных выражений (preg_match_all)

:txt{sometext}:alpha 

Я хочу, чтобы извлечь данные, как это (извлеченные из скобок):

Результат использования preg_match_all():

sometext 

Пытается так, но ничего из этого не работает:

php > preg_match_all('/^(\:txt)(.*)+(\{)(.*)+(\})/i', ':txt{sometext}:alpha', $m); var_dump($m); 
array(6) { 
    [0] => 
    array(1) { 
    [0] => 
    string(14) ":txt{sometext}" 
    } 
    [1] => 
    array(1) { 
    [0] => 
    string(1) ":" 
    } 
    [2] => 
    array(1) { 
    [0] => 
    string(0) "" 
    } 
    [3] => 
    array(1) { 
    [0] => 
    string(1) "{" 
    } 
    [4] => 
    array(1) { 
    [0] => 
    string(0) "" 
    } 
    [5] => 
    array(1) { 
    [0] => 
    string(1) "}" 
    } 
} 

Примечание: в качестве образца у меня есть :txt{sometext}:alpha:another{mydata}, поэтому я могу извлечь данные из :another и дать результаты, такие как mydata.

РЕЗУЛЬТАТЫ:

Результат от Sniffer:

php > preg_match_all('/(?<=:txt{)([^}]+)(?=})/', ':txt{sometext}:alpha', $x); var_dump($x); 
array(2) { 
    [0] => 
    array(1) { 
    [0] => 
    string(8) "sometext" 
    } 
    [1] => 
    array(1) { 
    [0] => 
    string(8) "sometext" 
    } 
} 

Результат от Джерри:

php > preg_match_all('/^:txt\{([^}]+)\}/', ':txt{sometext}:alpha', $x); var_dump($x); 
array(2) { 
    [0] => 
    array(1) { 
    [0] => 
    string(14) ":txt{sometext}" 
    } 
    [1] => 
    array(1) { 
    [0] => 
    string(8) "sometext" 
    } 
} 
+0

Это: '\ {(. +?) \}'? – Leri

+0

Тот же результат. Должен быть с ': txt' перед скобками. Поэтому, прежде чем найти скобки, следует найти, если существует ': txt'. –

+0

К сожалению, непонятый вопрос. – Leri

ответ

1

Почему все это, почему бы не просто:

(?<=:txt{)([^}]+)(?=}) 

Regex101 Demo

+0

Нет. Должно начинаться с ': txt', потому что в другой ситуации у меня есть': something'. –

+0

@MarinSagovac Проверьте править пожалуйста. –

+0

Работает, но в 'preg_match_all()' должно быть '/ (? <=: Txt {) ([^}] +) (? =}) /' –

Смежные вопросы