在不使用正则表达式的情况下获取字符串的某个部分的最简单方法是什么?

时间:2011-10-30 04:47:34

标签: php

我经常需要隔离字符串的某个部分,并且不擅长正则表达式。是的,我应该做得更好,但与此同时,我想知道你认为最好的方法是做什么。

我有一些随机文本,通常是标签,我需要从中分离片段。像这样:

<title>Ask a Question - Stack Overflow</title>
<link rel="shortcut icon" href="http://cdn.sstatic.net/stackoverflow/img/favicon.ico">
<link rel="apple-touch-icon" href="http://cdn.sstatic.net/stackoverflow/img/apple-touch-icon.png">
<link rel="search" type="application/opensearchdescription+xml" title="Stack Overflow" href="/opensearch.xml">
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js"></script>
<script type="text/javascript" src="http://cdn.sstatic.net/js/stub.js?v=a1714a379225"></script>
<link rel="stylesheet" type="text/css" href="http://cdn.sstatic.net/stackoverflow/all.css?v=bd607061c911">

由此,我需要获取“apple-touch-icon”的URL。我会这样做:

<?php
// $text contains the previous blurb

// This returns an array, with the second item starting with the necessary text
$explode = explode('apple-touch-icon" href=",$text);

// This returns the position of the `"`, which is what marks the end of the string
$end_of_string = strpos('"',$explode[1]);

// Now I get only this particular part of the string
$return = substr($explode,0,$end_of_string);
?>
瞧,瞧,它有效!但是,我想知道是否有更简单/更好的方式不涉及正则表达式。

4 个答案:

答案 0 :(得分:0)

尝试PHP strstr()函数。 http://www.php.net/manual/en/function.strstr.php

事后看来(现在编辑)我不确定这是你想要的。您可以使用它来隔离某些字符串片段,但它不会比正则表达式更快/更容易。

PHP str *()系列函数绝对是正确的开始,但我绝对建议刷新正则表达式,而不是寻找其他不太理想的解决方案。

答案 1 :(得分:0)

我强烈建议您学习正则表达式,它非常有用,而且学习起来并不难。

http://www.php.net/manual/en/ref.pcre.php

http://weblogtoolscollection.com/regex/regex.php

如果没有正则表达式,请查看strstr() function

答案 2 :(得分:0)

似乎strtok()就是你想要的。

但无论如何你的问题是“我不想要一个好的解决方案,我想从最坏的情况中挑选”。 所以,没有任何意义。 -1

答案 3 :(得分:0)

如果你正在解析HTML,你应该使用解析HTML的东西,而不是正则表达式或字符串搜索...说,根据你的样本数据和你想要避免正则表达式的愿望,你可以只使用strpos ...我更喜欢这种情况爆发了,因为它创造了一种使用模式,可以更好地传达你的意图。

int strpos(string $ haystack,mixed $ needle [,int $ offset = 0])

$index = strpos($text, "apple-touch-icon");
$index = strpos($text, "href=", $index);
 ...
$return = substr($text, $index, $end-of-string);