2016-02-18 39 views
1

例如如何获取第n次出现的单词之间的子字符串。

main_string =“我有个芒果其中< '价格'>(ABCDEF)< '/价格'> 10,香蕉其中< '/价格'>(ghijk)<“/价格'> 15和一个苹果<'/ price'>(lmnop)<'/ price'> 20.所以花费的总金额为45卢比;

我想找到子串这是 “< '价格'>” 和第三occurence “< '/价格'>

即输出=(lmnop)

的第三occurence之间

解决方案

注:在这里,在主串,标签不来的字符串,所以我一直在报价如<'price'>和<'/ price'>。解决方案仅在从标签中删除引号后才起作用。

+0

您是否尝试过的东西?请包括您尝试过的代码 - 阅读[如何提出一个好问题](http://stackoverflow.com/help/how-to-ask) – aslawin

+0

谢谢您的建议。我做过尝试,但只能获取第一次出现,即。 (ABCDEF)。 $ input =“我有一个芒果,其成本(abcdef)10卢比,一个香蕉成本(ghijk)15卢比和一个苹果花费(lmnop)卢比20。所以花费的总金额是45卢比。 preg_match('〜cost(。*?)Rs〜',$ input,$ output); –

回答

1

试试这个:

$string = 'I have a mango which <price>1111</price> 10, a banana which <price>3333</price> 15 and an apple which <price>5555</price> 20. So the total amount spent is Rs 45'; 
$pattern = '/\<price\>(.*?)\<\/price\>/'; 

$matches = array(); 

preg_match_all($pattern, $string, $matches); 

var_dump($matches); 

var_dump($matches[1][2]); 

结果是:

array(2) { 
    [0]=> 
    array(3) { 
    [0]=> 
    string(19) "<price>1111</price>" 
    [1]=> 
    string(19) "<price>3333</price>" 
    [2]=> 
    string(19) "<price>5555</price>" 
    } 
    [1]=> 
    array(3) { 
    [0]=> 
    string(4) "1111" 
    [1]=> 
    string(4) "3333" 
    [2]=> 
    string(4) "5555" 
    } 
} 
string(4) "5555" // <-- that's what you want 
+0

它与“成本”和“Rs”一起工作,但如果我在主字符串中用“”和“Rs”替换“”的“成本”,则不起作用。这个标签是否在$模式中有所不同。 –

+0

@rohit jaiswal它没有提到的问题。但是,如果你想在你的评论中以这种方式尝试更改模式为'$ pattern ='/ \ \((。*?)\)\ <\/price\> /';'。请发布你正在使用的字符串。 – aslawin

+0

这不起作用。只有我获得$数组的大小,但值是空的。 –

相关问题