Мне нужен шаблон preg_match_all () для получения строки внутри квадратных скобок PHP - PullRequest
0 голосов
/ 19 марта 2020

Я хочу проанализировать строку, чтобы получить значение внутри тега в квадратных скобках:

[vc_column_text][/vc_column_text]

Я использую preg_match_all() в PHP

$string = '[vc_row][vc_column][/vc_column][/vc_row][vc_row][vc_column width="1/2"][vc_column_text css=".vc_custom_1576642149231{margin-bottom: 0px !important;}"]This is the string I want to fetch[/vc_column_text][/vc_column][/vc_row]`;

Я пробовал это:

preg_match_all("'[vc_column_text(.*?)](.*?)[/vc_column_text]'", $string, $matches);

Но это возвращает только массив из 2-3 символов:

enter image description here

Помощь будет очень признателен :)

1 Ответ

1 голос
/ 19 марта 2020

Если вы хотите сопоставить только предложение, вы можете использовать первое совпадение [vc_column_text, за которым следует любой символ, кроме [ или ], а затем сопоставить закрывающее ]

Затем сопоставить 0+ вхождения символа пробела и захвата 1 или более вхождений любого символа, кроме пробела в группе 1.

\[vc_column_text[^][]*\]\s*(.+?)\[/vc_column_text]

Пояснение

  • \[vc_column_text Соответствие [vc_column_text
  • [^][]*\] Совпадение [, затем 0+ вхождений любого символа, кроме [ или ] и совпадение ]
  • \s* Совпадение 0+ пробелов символы
  • (.+?) Группа захвата 1, соответствует любому персонажу 1+ раз, не жадный
  • \[/vc_column_text] Совпадение [/vc_column_text]

Regex demo | Php демо

Пример кода

$string = '[vc_row][vc_column][/vc_column][/vc_row][vc_row][vc_column width="1/2"][vc_column_text css=".vc_custom_1576642149231{margin-bottom: 0px !important;}"]This is the string I want to fetch[/vc_column_text][/vc_column][/vc_row]';
preg_match_all("~\[vc_column_text[^][]*\]\s*(.+?)\[/vc_column_text]~", $string, $matches);
print_r($matches[1]);

Выход

Array
(
    [0] => This is the string I want to fetch
)
...