我有一个字符串,其中包含我希望在变量中提取的文本部分。在下面的字符串中,我想提取其中包含/
的任何内容。
$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;
}
}
有没有一种方法可以做到这一点,因为我需要为很多文本字符串执行此操作?
答案 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
答案 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
当然,这在某种程度上是个人品味的问题,如果我想以贪婪的方式捕捉某些东西,我宁愿通过排除来提取。