Входная строка:Исключить данные из скобок с использованием регулярных выражений (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"
}
}
Это: '\ {(. +?) \}'? – Leri
Тот же результат. Должен быть с ': txt' перед скобками. Поэтому, прежде чем найти скобки, следует найти, если существует ': txt'. –
К сожалению, непонятый вопрос. – Leri