Выполнение регулярного выражения - нужно найти точное местоположение появления строковых шаблонов - PullRequest
0 голосов
/ 23 августа 2010

Это продолжение предыдущего вопроса .

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

This is abobsled

Я также хочу знать точную позицию символа первого вхождения шаблона в строке, т. Е. В этом случае она находится на позиции 10-го символа - возможно ли это? Я использую php здесь.

==========================

Спасибо, я думаю, что снова застрял - однако сейчас это то, что я хочу сделать. Допустим, у меня есть шаблон такой природы:

Hello <=name=>

Take Care

From <=sender=>

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

Numbers: <=numbers=>

становится

Numbers: number1
number2

Когда я хочу что-то вроде:

Numbers: Number1
         Number2

Как я могу это сделать :(

Ответы [ 2 ]

6 голосов
/ 23 августа 2010

см .: флаг PREG_OFFSET_CAPTURE в http://docs.php.net/preg_match_all и / или http://docs.php.net/preg_match

1007 * Е.Г. *

<?php
$subject = 'This is abobsled';
preg_match('/b.b/', $subject, $m, PREG_OFFSET_CAPTURE);
var_dump($m)

печать

array(1) {
  [0]=>
  array(2) {
    [0]=>
    string(3) "bob"
    <b>[1]=>
    int(9)</b>
  }
}
Он начинает отсчет с 0, поэтому 10-й символ находится в позиции 9.
2 голосов
/ 11 октября 2012

Вы можете использовать то же регулярное выражение и учитывать позицию.

например:

function replace_content($tag,$position, $multiline)
{
    $out='Number 1';
    $padding=implode('',array_fill(0,$position, ' '));

    if ($multiline)
    {
        $out.="\n".$padding.'Number 2';
        // etc..
    }
    return $out
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...