REGEX соответствует двум шаблонам между указанными c символами - PullRequest
0 голосов
/ 18 июня 2020

Я знаю, что название может быть немного расплывчатым, но я не знал, как его сформулировать. У меня есть строка, содержащая текст, который выглядит примерно так:

$data["key1"] = "value1";

$data["key2"] = "value2";

$data["key3"] = "value3";

$data["key4"] = "value4";

Я хотел бы сопоставить все, что находится после $data[" и ]", и все, что между = " и "; в том же совпадение, поэтому, например, результаты будут

Match 1 = {key1, value1}

Match 2 = {key2, value2}

Match 3 = {key3, value3}

Match 4 = {key4, value4}

До сих пор я мог сопоставить значения с

/(?<=]\s=\s\")(.*?)(?=\s*\"\;)/

, но мне также понадобится первая часть результата, как ну, и я не уверен, как это сделать.

Кроме того, есть ли способ сопоставить его, если между символами есть (или нет) пробелы?

например

$data["key1"]= "value1";

$data["key2"]="value2";

$data["key3"] ="value3";

$data["key4"] ="value4" ;

Все ли будут соответствовать одному и тому же?

Ответы [ 2 ]

0 голосов
/ 18 июня 2020

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

// $output_array is an array which the first index is your key and second is the value
// for example, array( "key1", "value1")
$input_lines = '$data["key1"] = "value1"';
preg_match_all('/\"\w+\"/', $input_lines, $output_array);
0 голосов
/ 18 июня 2020

Попробуйте использовать preg_match_all:

$input = '$data["key1"] = "value1";';
preg_match_all('/\$\w+\["(.*?)"\]\s*=\s*"(.*?)";/', $input, $matches);
echo "Match = {" . $matches[1][0] . ", " . $matches[2][0] . "}";

Это напечатает:

Match = {key1, value1}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...