使用 php preg_match 从论坛引用中获取 id
Using php preg_match to get an id from forum quotes
我一直在使用 preg_match
尝试从我写的论坛中的引用中获取 ID。这是我目前所拥有的。
$quote = '[quote]19[\quote] This is a reply to the quote.';
$get = '/([quote])([0-9])([\quote])/';
$id = '';
preg_match($get, $quote, $id);
echo $id[0];
不幸的是,这并没有给我我希望的结果,我尝试了很多变体,甚至尝试了 preg_replace
,希望能给我我需要的东西,但是在大量阅读堆栈溢出之后我认为 preg_match
是要走的路。我似乎无法得到我想要的,即引号标签之间的 id。
我在 preg
方面的经验充其量是有限的,我已尽最大努力使其正常工作,但不幸的是,这超出了我目前的知识范围,因此我们将不胜感激。
提示
- [ 和 ] 用作字符 class 分隔符。
它们必须转义 \[ , \] 什么时候按字面意思理解。
定义 [0-9] 的意思就是:数字的字符 class。
- (…) 括号包含结果组。
如果您只想提取 [quote] 和 [\quote] 之间的数字数据 ([0 -9]*?) 应该放在方括号中。结果将在 $id[1] (group # 1).
- [\quote] 中的 反斜杠“\” 字符也必须转义,因为它本身就是转义字符:[\\\\quote](4 次 \ ,因为它被解释了两次;不知何故有点棘手,我知道)。
顺便说一句:也许 [/quote] 是这个意思;这样会更容易 (?)
代码
<?php
$quote1 = '[quote]19[\quote] This is a reply to the quote.';
$quote2 = '[quote]19[/quote] This is a reply to the quote.';
// $get = '/\[quote\]([0-9].*?)\[\quote\]/';
$get1 = '%\[quote\]([0-9]*?)\[\\quote\]%';
$get2 = '%\[quote\]([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
我一直在使用 preg_match
尝试从我写的论坛中的引用中获取 ID。这是我目前所拥有的。
$quote = '[quote]19[\quote] This is a reply to the quote.';
$get = '/([quote])([0-9])([\quote])/';
$id = '';
preg_match($get, $quote, $id);
echo $id[0];
不幸的是,这并没有给我我希望的结果,我尝试了很多变体,甚至尝试了 preg_replace
,希望能给我我需要的东西,但是在大量阅读堆栈溢出之后我认为 preg_match
是要走的路。我似乎无法得到我想要的,即引号标签之间的 id。
我在 preg
方面的经验充其量是有限的,我已尽最大努力使其正常工作,但不幸的是,这超出了我目前的知识范围,因此我们将不胜感激。
提示
- [ 和 ] 用作字符 class 分隔符。
它们必须转义 \[ , \] 什么时候按字面意思理解。
定义 [0-9] 的意思就是:数字的字符 class。 - (…) 括号包含结果组。
如果您只想提取 [quote] 和 [\quote] 之间的数字数据 ([0 -9]*?) 应该放在方括号中。结果将在 $id[1] (group # 1). - [\quote] 中的 反斜杠“\” 字符也必须转义,因为它本身就是转义字符:[\\\\quote](4 次 \ ,因为它被解释了两次;不知何故有点棘手,我知道)。
顺便说一句:也许 [/quote] 是这个意思;这样会更容易 (?)
代码
<?php
$quote1 = '[quote]19[\quote] This is a reply to the quote.';
$quote2 = '[quote]19[/quote] This is a reply to the quote.';
// $get = '/\[quote\]([0-9].*?)\[\quote\]/';
$get1 = '%\[quote\]([0-9]*?)\[\\quote\]%';
$get2 = '%\[quote\]([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