【问题标题】:preg_match() text extractionpreg_match() 文本提取
【发布时间】:2013-04-04 23:06:19
【问题描述】:

我在一个段落中有这个字符串:

今天的名言是:'从昨天学习,为今天而活,为明天而希望。重要的是不要停止提问。'

我需要提取这句话“从昨天学习,为今天而活,为明天希望。重要的是不要停止提问。”

我不熟悉正则表达式,所以我想在这里得到一点帮助。 我试过了:

preg_match("Today's quote is: '[a-zA-Z0-9]'",$response, $matches);

偏离了我的想象,它不起作用。任何帮助,将不胜感激。提前致谢。

编辑: 我还需要在字母数字表达式中包含“_”和“-”。

例子:

$string = "site : '6LcZwNcSAAAAAEcQkyCCSteouAQS9jO7wDrgzvbL', rtl : false, challenge : '03AHJ_Vuv_3y7kY-GQaCyzgrz9ZTv_cFQN_F0jEqOGNq0-3QANrsxJ18oPj4bbhRqPoISIZbqBBdeEXVfpnnVjlTsjoxQugI4j0zB1yRQU1m4wXzFGVRpuRyXJmnJU3d7Ix0nhyO_OBeFCR7v9gXtz_BNN04tSzXxVyvKCExO9I2vcqcIhWJQE8K8'";

我需要匹配单词“Challenge”之后的字符串。包含下划线和“-”。

【问题讨论】:

  • 对于提取为什么不使用 substr()?你确定你需要一个正则表达式?
  • 您只需要获取引号内的部分文本?
  • @Barmar 我需要引号内的部分
  • @MahmoudElSelimy 你有更多需要提取的字符串示例吗?
  • @ExplosionPills 上面的字符串存在于具有相似公式的段落中。所以我需要确保它前面有“今天的报价是:”。

标签: regex preg-match text-extraction


【解决方案1】:

这应该可以完成工作:

$string = "Today's quote is: 'Learn from yesterday, live for today, hope for tomorrow. The important thing is not to stop questioning.'";
preg_match('/.*?:.*?\'(.*?)\'/', $string, $m);
echo $m[1]; // Learn from yesterday, live for today, hope for tomorrow. The important thing is not to stop questioning.

EDIT2:在 OP 展示了另一个示例之后。这是该编辑的解决方案:

$string = "site : '6LcZwNcSAAAAAEcQkyCCSteouAQS9jO7wDrgzvbL', rtl : false, challenge : '03AHJ_Vuv_3y7kY-GQaCyzgrz9ZTv_cFQN_F0jEqOGNq0-3QANrsxJ18oPj4bbhRqPoISIZbqBBdeEXVfpnnVjlTsjoxQugI4j0zB1yRQU1m4wXzFGVRpuRyXJmnJU3d7Ix0nhyO_OBeFCR7v9gXtz_BNN04tSzXxVyvKCExO9I2vcqcIhWJQE8K8'";
preg_match_all('/.*?:.*?\'(.*?)\'/', $string, $m);
var_dump($m);

【讨论】:

  • 即使它在段落内也能正常工作。我需要确保它前面有 ""Today's quote is:"。
  • @MahmoudElSelimy “在段落内”确实含糊不清,我提供了对当前模式 Today's quote is: '{match this}' 的答案。因此,如果您有其他要求,请告诉我们。
  • 我在上面添加了另一个示例。希望对您有所帮助。
  • @MahmoudElSelimy 查看我的编辑,基本上你可以使用echo $m[1][0] .'<br>'. $m[1][1]; 调用这两个值,或者像这样foreach($m[1] as $extracted){ echo $extracted . '<br>';} 进行循环
  • 非常感谢您与我保持同步。我尝试了您的示例,对其进行了一些调整,并像魅力一样工作。我所做的是: preg_match('/challenge.*?:.*?\'(_?-?.*?)\'/',$response, $matches);然后我删除了“挑战:”这个词和使用 str_replace 的引号。
猜你喜欢
  • 1970-01-01
  • 2013-02-21
  • 1970-01-01
  • 1970-01-01
  • 2013-04-08
  • 2011-01-09
  • 1970-01-01
  • 2011-05-14
  • 1970-01-01
相关资源
最近更新 更多