从字符串中提取某些部分

时间:2016-06-27 10:07:16

标签: php regex string

我有一个字符串,其中包含我希望在变量中提取的文本部分。在下面的字符串中,我想提取其中包含/的任何内容。

$str = 'this is a random string foo/bar random - string words';

在上面的示例中,我想提取foo/bar。目前我通过exploding空格处的字符串执行此操作,然后循环并检查每个部分是否包含/

$words = explode(' ', $str);
foreach($words as $word) {
    if(strpos($word, '/') !== false) {
        $myVar = $word;
    }
}

有没有一种方法可以做到这一点,因为我需要为很多文本字符串执行此操作?

3 个答案:

答案 0 :(得分:3)

如果你确切地知道你需要匹配由/分隔的小写字母组成的两个单词,那么多匹配正则表达式也可以,就像这样

preg_match_all('%[a-z]+/[a-z]+%', $subject, $result, PREG_PATTERN_ORDER);
for ($i = 0; $i < count($result[0]); $i++) {
    # Matched text = $result[0][$i];
}

输出: - https://eval.in/596292

然而,效率应该通过实验测试

答案 1 :(得分:0)

我会使用:preg_match_all("/(\w+\/\w+)[\s|$]/", $str, $output);

现在$ output [1]是一个包含匹配项的数组 模式匹配一​​个单词后跟斜线然后再单词,然后它需要一个空格或字符串结尾。这意味着它不会匹配如下字符串:
last/string/to/test

https://3v4l.org/r8p2g

答案 2 :(得分:0)

嗯,正如其他人所说,最好的解决方案是正则表达式。但你必须清楚你想要匹配的东西,例如'任何带有/的内容'会匹配您的整个句子。我想在你的情况下最简单的说是白色空间:

<?php
$str = 'this is a random string foo/bar random - string words - another/example';
preg_match_all('#[^ ]+\/[^ ]+#', $str, $matches);
var_dump($matches);
  

array(1){[0] =&gt;数组(2){       [0] =&GT;       string(7)“foo / bar”       1 =&GT;       string(15)“another / example”}}

see here for a running example

当然,这在某种程度上是个人品味的问题,如果我想以贪婪的方式捕捉某些东西,我宁愿通过排除来提取。