$str="This is a string with <xref cite@#>test</xref> and
<xref cite@#>string2</xref>";
我需要在“@#&gt; test”和“xref”之间输入字符串。
我试过了:
$start=strpos($str,"@#>test");
$end=strpos($str,"xref ",$start); //here how to search backwards from "@#>test"
//to "xref "
预期输出 举
strrpos - 仅用于获取字符串的最后一次出现。是否有任何函数从指定的位置向后搜索字符串?
答案 0 :(得分:1)
试试这个: by regex (?<=xref).*(?=@#)
$re = "/(?<=xref).*(?=@#)/m";
$str = "This is a string with <xref cite@#>test</xref> and \n<xref cite@#>test</xref>";
preg_match_all($re, $str, $matches);
[现场演示] [1]
更新: (?<=<xref).*?(?=@#)
$re = "/(?<=<xref).*?(?=@#)/m";
$str = "This is a string with <xref cite@#>test2</xref> and <xref cite@#>test1</xref><xref cite@#>test</xref><xref cite@#>test1</xref>\n<xref cite<e.g.>[p.11]@#>test</xref>";
preg_match_all($re, $str, $matches);
答案 1 :(得分:1)
没有从指定位置向后搜索的功能,但一个简单的解决方法是使用substr
截断所需位置的输入,然后使用strrpos
:
$truncated = substr($str, 0, $start);
$end = strrpos($truncated, "xref ");
然而,看起来正则表达式对于这种不太直接的模式匹配来说可能是更方便的选择。
答案 2 :(得分:0)
http://php.net/manual/en/function.strrpos.php
如果值为负数,则搜索将从字符串末尾的那么多字符开始,向后搜索。
因此,如果您为偏移量提供负数,则可以向后搜索。这应该工作
$end=strpos($str,"@#>test");
$start=strpos($str,"xref ",$end-strlen($str));
$output=substr($str,$start, $end-$start);