Использование php preg_match для получения идентификатора из цитат форума

Я использую preg_match чтобы попытаться получить идентификатор из цитаты на моих форумах, которые я написал. Это то, что я до сих пор.

$quote = '
19[\quote] This is a reply to the quote.'; $get = '/(
)([0-9])([\quote])/'; $id = ''; preg_match($get, $quote, $id); echo $id[0];

К сожалению, это не дает мне результат, на который я надеялся, и я пробовал много вариантов и даже пытался preg_replace в надежде, что это может дать мне то, что мне нужно, но после большого чтения переполнения стека, я думаю, preg_match это путь. Я просто не могу получить то, что хочу, это идентификатор между тегами цитаты.

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

0

Решение

Советы

  • [ а также ] используются в качестве разделителей классов символов.
    Их нужно избегать \ [, \], если понимать буквально.
    Определение [0-9] означает именно это: символьный класс цифр.
  • (…) скобки охватывают группу результатов.
    Если вы хотите извлечь числовые данные только между
    и [\ quote] ([0-9] *?), Они должны быть в скобках. Результат будет в $ id [1] (группа № 1).
  • обратная косая черта «\» символ в [\ quote] тоже должен быть экранирован, так как это сам символ экранирования: [\\\\ quote] (4 раза \, поскольку он интерпретируется дважды; я знаю, что это сложно)
    Кстати: возможно [/ quote] имеется в виду; что облегчит (?)

Код

<?php
$quote1 = '
19[\quote] This is a reply to the quote.'; $quote2 = '
19
This is a reply to the quote.'; // $get = '/\
([0-9].*?)\[\quote\]/'; $get1 = '%\
([0-9]*?)\[\\\\quote\]%'; $get2 = '%\
([0-9]*?)\[/quote\]%'; $id = ''; preg_match($get1, $quote1, $id); echo '$get1,$quote1 :: ' . $id[1] . '<br />'; preg_match($get2, $quote2, $id); echo '$get2,$quote2 :: ' . $id[1] . '<br />'; ?>

Выход:
$ get1, $ quote1 :: 19
$ get2, $ quote2 :: 19

Regex прокомментировал

    \[          # Match the character “[” literally
quote       # Match the characters “quote” literally
\]          # Match the character “]” literally
(           # Match the regular expression below and capture its match into backreference number 1
[0-9]       # Match a single character in the range between “0” and “9”
*?          # Between zero and unlimited times, as few times as possible, expanding as needed (lazy)
)
\[          # Match the character “[” literally
\\\\       # Match the character “\” literally
quote       # Match the characters “quote” literally
\]          # Match the character “]” literally
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]