Выражение регулярного выражения в функции strstr возвращает пустую группу захвата - PullRequest
0 голосов
/ 17 июня 2020

Проблема: при использовании жестко заданной строки это работает. Однако, используя мой контент Dynami c из $ post_content, регулярное выражение возвращает пустой массив. Я ожидаю, что он вернет мой ожидаемый результат, где он получает все результаты из группы захвата 1 в массиве из этой этой функции регулярного выражения .

У меня есть следующая функция:

$post_content = (string)strstr($post_content, 'MyNeedle', true);

Если я print_r () результат этой функции:

"Je naam (verplicht) [text* your-test] Je e-mailadres (verplicht) [email* your-tester] Onderwerp [text your-testerer] Je bericht [textarea your-testererer] [submit \"Verzenden\"] 1 Postcode [text* postalCode] Adres [email* streetAddress] Onderwerp [text your-subject] Je bericht [textarea your-message] [submit \"Verzenden\"] 1";

Если я var_dump () результат этой функции:

string(278) " Je naam (verplicht) [text* your-test] Je e-mailadres (verplicht) [email* your-tester] Onderwerp [text your-testerer] Je bericht [textarea your-testererer] [submit "Verzenden"] 1 " string(258) " Postcode [text* postalCode] Adres [email* streetAddress] Onderwerp [text your-subject] Je bericht [textarea your-message] [submit "Verzenden"] 1 "

У меня есть следующее функция регулярного выражения :

preg_match_all($re, $post_content, $fields);

Ожидаемый результат:

array(3) {
  [0]=>
  string "Je naam (verplicht)"
  [1]=>
  string "Je e-mailadres (verplicht)"
  [2]=>
  string "Onderwerp"
}

et c.

Мой вывод:

array(1) {
  [0]=>
  string(0) ""
}
array(1) {
  [0]=>
  string(0) ""
}

Полный пример кода:

    // DOESNT WORK
    $post_content = (string)strstr($post_content, 'MyNeedle', true);

    // WORKS
    $post_content = "Je naam (verplicht) [text* your-test] Je e-mailadres (verplicht) [email* your-tester] Onderwerp [text your-testerer] Je bericht [textarea your-testererer] [submit \"Verzenden\"] 1 Postcode [text* postalCode] Adres [email* streetAddress] Onderwerp [text your-subject] Je bericht [textarea your-message] [submit \"Verzenden\"] 1";

    // REST OF THE FUNC
    $re = '/([^][\s]+(?:\h+[^][\s]+)*)?\h+\[(?:\w+\*?\h+)?([^][]+)]/';
    preg_match_all($re, $post_content, $fields);
    $uniqueKeys = array_unique($fields[1]);
    var_dump($uniqueKeys);

Почему группа захвата 1 не возвращает ожидаемое значение, когда я использую функцию strstr?

...