我正在尝试创建一个php函数,它将返回两个子字符串之间所有文本出现的数组。我在正则表达式上没用,会发现这个非常方便,我敢肯定那里已经有一个很好的了,但我找不到它。
function getAllBetweenStr($input, $start, $end)
{
//DO STUFF
//RETURN ARRAY
}
$inputStr ="<a href='http://formaco4/en/abc' class='currentLink' hreflang='en'>abc1/a>
<a href='http://formaco4/en/abc/b1' hreflang='en'>abc2</a>
<a href='http://formaco4/en/abc/b2' hreflang='en'>abc3</a>
<a href='http://formaco4/en/abc/b3' hreflang='en'>abc4</a>";
$linkStr = array();
$linkStr = getAllBetweenStr($inputStr, "http://formaco4/en/'", "' hreflang")
返回数组就是这样的 数组([0] =&gt;“abc / b1”,[1] =&gt;“abc / b2”,...,[n] =&gt;“gingers / rule”)
如果它有帮助,我已经有了这个功能:
function getBetweenStr($string, $start, $end)
{
$string = " ".$string;
$ini = strpos($string,$start);
if ($ini == 0) return "";
$ini += strlen($start);
$len = strpos($string,$end,$ini) - $ini;
return substr($string,$ini,$len);
}
答案 0 :(得分:1)
我相信这样的内容会奏效 - 它使用preg_match_all
来捕获两个$start
和$end
字符串之间的任何内容。
function getBetweenStr($string, $start, $end)
{
preg_match_all( '/' . preg_quote( $start, '/') . '(.*?)' . preg_quote( $end, '/') . '/', $string, $matches);
return $matches[1];
}
答案 1 :(得分:0)
我没有使用preg_match函数。希望你能找到这个有用的
试试这个,我也为你提供了更好的功能(: :
function stribet($inputstr, $delimiterLeft, $delimiterRight) {
$posLeft = stripos($inputstr, $delimiterLeft) + strlen($delimiterLeft);
$posRight = stripos($inputstr, $delimiterRight, $posLeft);
return substr($inputstr, $posLeft, $posRight - $posLeft);
}
$links = array("<a href='http://formaco4/en/abc' class='currentLink' hreflang='en'>abc1/a>", "<a href='http://formaco4/en/abc/b1' hreflang='en'>abc2</a>");
foreach ($links as $linkstr){
$linkstr = stribet($linkstr, "http://formaco4/en/'", "' hreflang='");
//echo $linkstr;
$data[] = $linkstr;
}
print_r($data);
如果您只想坚持正常的字符串函数,请尝试爆炸<a
然后使用foreach循环来获取数据。
像
这样的东西$inputStr ="<a href='http://formaco4/en/abc' class='currentLink' hreflang='en'>abc1/a>
<a href='http://formaco4/en/abc/b1' hreflang='en'>abc2</a>
<a href='http://formaco4/en/abc/b2' hreflang='en'>abc3</a>
<a href='http://formaco4/en/abc/b3' hreflang='en'>abc4</a>";
$inputArray = explode ("<a", $inputStr);
foreach ($inputArray as $linkstr){
$linkstr = stribet($linkstr, "http://formaco4/en/'", "' hreflang='");
//echo $linkstr;
$data[] = $linkstr;
}
print_r($data);
答案 2 :(得分:0)
学习正则表达式真的很值得。它们非常强大和有用:
preg_match_all('|'.preg_quote($start).'(.*?)'.preg_quote($end).'|', $input, $linkStr);
在您的示例中,这将构建一个正则表达式:
|http:\/\/formaco4\/en\/\(.*?) hreflang|
parens()告诉它捕获字符串的那一部分。 “。*?”在parens中指示它捕获所有字符,直到下面的内容。
答案 3 :(得分:0)
试试这个(未经测试):
function find_occurencies($start, $search, $end)
{
$start = stripslashes($start);
$end = stripslashes($end);
$search = stripslashes($search);
$pattern = '%'. $start . '([\s\w]+)?' . $end . '%';
preg_match_all($pattern, $search, $matches);
// Print the matches (should)
echo '<pre>';
print_r($matches);
echo '</pre>';
}
希望它有效。
答案 4 :(得分:0)
<?php
function getAllBetweenStr($string, $start, $end)
{
$array_to_return = array();
for($i=0; $i<count(explode($start,$string))-1; $i++) {
$str_0 = explode($start,$string);
$str_1 = explode($end, $str_0[1]);
$array_to_return[$i] = $str_1[0];
}
return $array_to_return;
}
$inputStr ="<a href='http://formaco4/en/abc' class='currentLink' hreflang='en'>abc1</a>
<a href='http://formaco4/en/abc/b1' hreflang='en'>abc2</a>
<a href='http://formaco4/en/abc/b2' hreflang='en'>abc3</a>
<a href='http://formaco4/en/abc/b3' hreflang='en'>abc4</a>";
$linkStr = getAllBetweenStr($inputStr, "hreflang='en'>", "</a>");
print_r ($linkStr);
?>