【问题标题】:Finding text between the same two characters within a php string在php字符串中的相同两个字符之间查找文本
【发布时间】:2015-11-05 02:10:36
【问题描述】:

所以我知道如何从 php 字符串中提取文本,当它被两个不同的字符(即 [abc])完全分隔时......

但是,我现在面临一个有问题的情况,我需要提取位于同一字符 ('/') 的两个实例之间的文本。更棘手的是,这可能在同一个字符串中发生多次。

一个例子应该有助于更清楚地说明这一点:

"This is /a/ silly ex/amp/le of what I /me/an."

在这种情况下,我想抓住'a', 'amp' and 'me'

这些示例显示了我可能遇到的各种情况(不同的长度以及我不是抓取整个单词而是单词中的字母的情况)。

我尝试过的:

('/(\/.+?)+(\/)/i')

但是,正如预期的那样,这会捕获第一个和最后一个斜杠之间的所有内容。理想的方式是匹配直到下一个斜杠出现,而不是最后一个...

我已经在谷歌上搜索了很长一段时间,但我只是想出了两个不同分隔符的案例。

【问题讨论】:

  • 只是提示,您不必使用/ 作为分隔符。当您的搜索模式包含/ 时,可以提高可读性以使用不同的字符并避免转义:#/.+?/#
  • @miken32 啊,是的,好点。我以前用过这个(讽刺的是,对于较短的正则表达式),但没想到在这里使用它。

标签: php regex string


【解决方案1】:

您可以使用preg_match_all 获取多个匹配项。

$string = 'This is /a/ silly ex/ampl/e of what/ I me/an';
$regex = '/\/.+?\//';
preg_match_all($regex, $string, $matches);

print_r($matches);


Array
(
    [0] => Array
    (
        [0] => /a/
        [1] => /ampl/
        [2] => / I me/
    )
)

【讨论】:

  • 谢谢,凯文!这成功了。我接受你的回答。
【解决方案2】:

试试这个:

(\/)(.*?)\1

(\/) 内部的内容将是您匹配的内容。例如,一组* 之间的匹配如下所示:

(\*)(.*?)\1

Regex101

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-07
    • 1970-01-01
    • 1970-01-01
    • 2014-12-07
    • 1970-01-01
    • 2011-11-20
    • 2021-04-14
    • 2020-06-03
    相关资源
    最近更新 更多