Регулярное выражение для соответствующей фразы между '' php - PullRequest
1 голос
/ 07 октября 2019

Я хочу сопоставить содержимое внутри ' и ' (одинарные кавычки). Например: 'for example' должно вернуть for и example. Это только часть предложения, которое я должен проанализировать, я использовал preg_split(\s) для всего предложения, поэтому 'for example' станет 'for and example'.

Сейчас я попробовал /^'(.*)|(.*)'$/ и этовозвращает только for, но не example, если я скажу как /^(.*)'|'(.*)$/, он возвращает только example, но не for. Как мне это исправить?

Ответы [ 2 ]

1 голос
/ 08 октября 2019

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

Код: ( PHP Demo ) ( Regex Demo )

$string = "text 'for an example of the \"continue\" metacharacter' text";

var_export(preg_match_all("~(?|'|\G(?!^) )\K[^ ']+~", $string, $out) ? $out[0] : []);

Вывод:

array (
  0 => 'for',
  1 => 'an',
  2 => 'example',
  3 => 'of',
  4 => 'the',
  5 => '"continue"',
  6 => 'metacharacter',
)
1 голос
/ 07 октября 2019

Чтобы получить отдельные предложения (которые вы затем хотите разделить), вы можете использовать preg_match_all () , чтобы захватить что-нибудь между двумя одинарными кавычками.

preg_match_all("~'([^']+)'~", $text, $matches)
$string = $matches[1];

$string теперь содержитчто-то вроде «пример строки со словами». Теперь, если вы хотите разбить строку в соответствии с определенной последовательностью / символом, вы можете использовать explode () :

$string = "example string with words";
$result = explode(" ", $string);
print_r($result);

дает вам:

Array
(
    [0] => example
    [1] => string
    [2] => with
    [3] => words
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...