Абсолютный вопрос регулярного выражения для начинающих - PullRequest
0 голосов
/ 14 августа 2010

Я использую preg-функции PHP 5, если это имеет значение.

Рассмотрим регулярный язык, которому соответствует следующее регулярное выражение.

([^{}] | {[0-9a-zA-Z_]+})*

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

asdfasdf 1243 # $ * # {A_123} asdf? {432U}

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

A_123: 20; 432U: 32

Возможно ли это с помощью регулярных выражений? Или мне просто написать функцию «вручную» без регулярного выражения, которая проходит через каждый символ строки и анализирует данные, которые мне нужны?

Простите, если это элементарный вопрос; Я только учусь!

1 Ответ

2 голосов
/ 14 августа 2010

Чтобы зафиксировать смещения, вы можете установить флаг PREG_OFFSET_CAPTURE. http://php.net/manual/en/function.preg-match.php

preg_match ($regex, $subject, $matches, PREG_OFFSET_CAPTURE);

Вы можете запустить следующий скрипт самостоятельно и увидеть результаты:

<code>$regex = '~({(\w+)})+~';
$str = 'asdfasdf 1243#$*#{A_123}asdf?{432U}';

preg_match_all($regex, $str, $m, PREG_OFFSET_CAPTURE);
$tags = $m[1];

echo '<pre>';
print_r($tags); // prints tags and their offsets
echo '
';

По шаблону:

  • \w является escape-последовательностью, эквивалентной следующему классу символов: [a-zA-Z0-9_]
  • Круглые скобки (...) используются для группировки, а также для создания обратных ссылок.
  • + - это квантификатор, означающий «один или несколько» из предыдущего шаблона

Хороший ресурс для регулярных выражений: http://www.regular -expressions.info

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