【问题标题】:Everything between "[reply]" and extract the reply number“[回复]”之间的所有内容并提取回复号码
【发布时间】:2016-04-23 01:42:44
【问题描述】:

请看下面的情况。

[reply="292"] Text Here [/reply]

我想要得到的是reply="NUMBERS" 中引号之间的数字。我想将其提取到一个变量中,并将[reply="NUMBER"] this text here [/reply] 之间的文本提取到另一个变量中。

所以对于这个例子:

[reply="292"] Text Here [/reply]

我要提取回复号码:292reply 标签之间的文字:Text here

我试过这个:

\[reply\=\"]([A-Z]\w)\[\/reply]

但这仅在reply 标记之前有效,之后不再有效。我该怎么做?

【问题讨论】:

  • 本网站不是/不应该是个人正则表达式生成器。
  • 另外,冒充他人并不酷/在您的管辖范围内可能是非法的。
  • @LightnessRacesinOrbit 你在说什么?
  • 你是真正的泰勒斯威夫特吗?名人
  • @TaylorSwift:很好。

标签: php regex extract extraction text-extraction


【解决方案1】:

我保留了泛型 (.*),但您可以指定类型,例如小数 (\d+)。

php:

$s = '[reply="292"] Text Here [/reply]';
$expr = '/\[reply=\"(.*)\"\](.*)\[\/reply\]/';
if(preg_match($expr,$s,$r)){
    var_dump($r);
}

javascript:

s = '[reply="292"] Text Here [/reply]'
s.match(/\[reply=\"(.*)\"\](.*)\[\/reply\]/)
//["[reply="292"] Text Here [/reply]", "292", " Text Here "]

【讨论】:

  • 谢谢,可以处理数字、字母和几乎所有内容。
【解决方案2】:

简单!

\[reply\=\"(\d+)\"](.*?)\[\/reply]

说明

  1. \d 代表数字
  2. + 表示指定字符出现 1 次或多次。
  3. [\w\s] 用于单词和空格中的任何字符 (\s)

然后像这样将它应用到 PHP:

<?php                                                                       
  $str = "[reply=\"292\"] Text Here [/reply]";
  preg_match('/\[reply\=\"(\d+)\"]([\w\s]+)\[\/reply]/', $str, $re);
  print_r($re[1]); // printing group 1, the reply number
  print_r($re[2]); // printing group 2, the text
?>

重要!!

只获取组值,而不是全部。反正你只需要其中的一部分。

【讨论】:

  • 您好,谢谢。抱歉,它可能令人困惑,但它不适用于除数字和字母(文本)之外的任何其他内容。
  • 抱歉,每次在 StackOverflow 中回答时,我都会对我的答案进行迭代更新。请查看最新更新。我相信它是完美的
  • 不幸的是,除了字母和数字之外,它仍然无法使用
  • 我以为是这个意思。这就是我这样做的原因。我可以让它匹配一切。没关系
猜你喜欢
  • 1970-01-01
  • 2020-09-27
  • 2023-04-03
  • 2020-12-19
  • 1970-01-01
  • 1970-01-01
  • 2012-12-17
  • 2011-11-23
  • 1970-01-01
相关资源
最近更新 更多