2012-05-16 3 views
0

Im пытается перечислить здесь, как сопоставить строки, похожие на массив printr.Php regexp получить строки из массива print_r как строка

variable_data[0][var_name] 

Я хотел бы получить из приведенного выше примера 3 строки, variable_data, 0 и var_name. Этот пример выше сохраняется в БД, поэтому я могу создать такую ​​же структуру массива, но я застрял. Также if должен посмотреть if, если строка (как указано выше) находится в этой структуре, в противном случае не требуется preg_match.

Примечание: я не хочу сериализовать этот массив, поскольку массив «может» содержать некоторые символы, которые могут сломать его при несериализации, и мне также нужно, чтобы это значение в массиве было полностью видимым.

Любой, у кого есть навыки регулярного выражения, которые могут знать подход?

Решение:

(\b([\w]*[\w]).\b([\w]*[\w]).+(\b[\w]*[\w])) 

Thos 2 Первые индексы должны быть пропущены ... но я все еще получаю то, что я хочу :)

ответ

1

Не зря, но не могли бы вы сделать ..

$result = explode('[', someString); 
foreach ($result as $i => $v) { 
    $temp = str_replace(']'. ''. $result[$i]); 
    //Do something with temp 
} 

Очевидно, что вам необходимо отредактировать приведенное выше немного в зависимости от того, что вы делаете bu t это очень просто и даже дает вам такую ​​же гибкость, и вам не нужно ссылаться на подходящий движок ...

Я не думаю, что мы создаем regex здесь для людей ... вместо этого, пожалуйста, см. http://regexpal.com/ для Регулятор/конструктор Regex с визуальной поддержкой.

Кроме того, люди обычно не знают, как правильно их использовать, а затем поощряют другие, создавая выражения для них.

Пожалуйста, помните, сложные выражения могут иметь ужасные накладные расходы производительности, хотя нет ничего, казалось бы сложным о вашей просьбе ...

Тогда после того, как она compelte после заполненную RegEx и ответить на свой вопрос для максимального 1337ne $$ :)

Но так как я хорошо здесь ваша награда:

\[.+\]\[\d+\] 

или

[a-z]+_[a-z]+\[.+\]\[\d+\] 

В зависимости от того, что вы хотите, чтобы соответствовать из строки (которые вы не указали), поэтому я приняла на себя все

Оба выполняют следующим образом:

arr_var[name][0]; //Matched 

arr_var[name]; //Not matched 


arr_var[name][0][1];//Matched 

arr_var[name][2220][11];//Matched 

Опять же, проверить их и понять, с визуальной помощь по вышеуказанной ссылке.

+0

Lol спасибо :) Я всегда думал, что соответствие с регистрационным быстрее и лучше для производительности, но я могу быть абсолютно неправым. Я обычно использую http://gskinner.com/RegExr/ для шаблонов reg, но кажется, что AS3 и PHP a не так похожи в reg, то, что используется в AS3, также не работает в php – Deko

+0

Нет проблем, могу ли я получить upvote ? – Jay

+0

Конечно, я буду использовать цикл на данный момент, не смог заставить шаблоны работать на моем случае. Я все еще пытаюсь создать что-то здесь, получил это до сих пор: (\ w * [a-zA-Z0-9]) Проблема в том, что это соответствует первой группе, а затем останавливается, нужно получить все три: S – Deko

1

Решение:

(\b([\w]*[\w]).\b([\w]*[\w]).+(\b[\w]*[\w])) 

Эти 2 первые индексы должны быть пропущены ...но я все еще получаю то, что я хочу :)

Редактировать

Здесь улучшается одно:

$str = "variable[group1][parent][child][grandchild]"; 
preg_match_all('/(\b([\w]*[\w]))/', $str,$matches); 
echo '<pre>'; 
    print_r($matches); 
echo '</pre>'; 

// Output 
Array 
     ( 
      [0] => variable 
      [1] => group1 
      [2] => parent 
      [3] => child 
      [4] => grandchild 
     ) 
+0

Хорошая работа! если это сработает для вас, тогда вы получили мой голос! – Jay

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