Я использую 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-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
\[ # 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
Других решений пока нет …