Php 如何获得从末尾匹配的字符串中模式的位置

Php 如何获得从末尾匹配的字符串中模式的位置,php,Php,我想得到从末端匹配的图案的位置。例如,在这种情况下,sch匹配school——因此图案的位置应为3,即从末端开始: 如下所述,单词school的索引是以这种方式排列的,因此如果sch的匹配成功,则应返回从匹配的单词末尾(school)到模式开头(从末尾)的位置 $a = "this is school of sachin"; $pattern = "sch"; 匹配模式 我尝试了strpos(),但未能达到我的目的 s c h o o l 5 4 3 2 1 0 ^---^ 根据我的问题,

我想得到从末端匹配的图案的位置。例如,在这种情况下,
sch
匹配
school
——因此图案的位置应为3,即从末端开始:

如下所述,单词school的索引是以这种方式排列的,因此如果
sch
的匹配成功,则应返回从匹配的单词末尾(school)到模式开头(从末尾)的位置

$a = "this is school of sachin";
$pattern = "sch";
匹配模式

我尝试了
strpos()
,但未能达到我的目的

s c h o o l
5 4 3 2 1 0

^---^
根据我的问题,strps()的输出应该是3。

echo strpos($a, $pattern); // this is wrong 

<?php
$a = "this is school of sachin";
$pattern = "sch";
$words = explode(" ", $a);
$pattern = strrev($pattern);
foreach($words as $word){
$pos = strpos(strrev($word), $pattern);
    if($pos !== false){
    print($pos);
    break;
    }
}
?>


没有Sharanya建议的整个方法

<?php
$a = "this is sachinùs school of sachin";
$pattern = "sach";
if(preg_match("/[^ [:punct:]]*".$pattern."([^ [:punct:]]*)/u", $a, $match)){
print(mb_strlen($match[1], "UTF-8"));
    if($pattern == $match[0]){
    print(" (full word)");
    }
}
?>
$haystack='这是一所非常好的萨钦学校';
$pattern='sch';
$match=strstrstr($haystack,$pattern);
对于($i=0;$i

请注意,它将从左开始查找第一个出现的单词,例如“schschool”将输出6。

注意-这也会告诉您找到的单词是否为完整单词。
看看-

$pattern=“sch”;
$b=爆炸(“‘这是萨钦学校’);
$b=阵列_反向($b);
对于($i=0;$i
使用带(
\b
)的正则表达式查找与提供的模式匹配的单词,然后使用捕获组捕获模式后的所有内容。然后,只需返回该字符串的长度:

  $pattern = "sch";
  $b = explode(' ','this is school of sachin');
  $b = array_reverse($b);
  for($i=0;$i < count($b);$i++){
     if(strpos($b[$i],$pattern) !== false){
       echo $i+1;
       $full = ', not a full word';
       if($b[$i] == $pattern){
         $full = ', full word';
       } 
       echo $full;
       break;
     }
  }
如果您还想考虑非英语字符,则可以使用
u
修饰符:

$a = "this is school of sachin";
if (preg_match('/\b(sch(\w+))\b/', $a, $matches)) {
    echo strlen($matches[2]); // => 3
}


所以模式的位置应该是3
——你能解释一下吗?@AmalMurali检查我的问题。我的意思是,如果sch匹配school,那么我需要匹配模式最后一个的索引。@AmalMurali我希望你理解我的问题?你可以用
strlen
获得字符串的长度。您的职位来自
strpos
。你也有图案的长度。我想您可以完成提取所需数字所需的数学计算。您的意思是通常您会得到
8
,因为匹配的
sch
从字符串的第9个字符开始,现在你想要
11
,因为这是匹配后第一个字符的索引?没有更简单的方法吗?@RishabhRaj我更新了我的答案。我认为第二种方法很简单。很好,但它对非英语字符有效吗?这里字符串有一个荷兰语字符,因此您的代码不是荷兰语working@RishabhRaj现在,我在第二种方法中添加了Unicode支持。sharanya:最后一个问题是,如果我想在非英语字符的情况下检查该字符串中是否存在完整的单词,该怎么办?您希望从该示例中得到什么结果?我的意思是从字符串中“这是一所非常好的萨钦学校”,什么样的结果应该是正确的?(提醒“sachin”与“sch”不匹配)在任何情况下,只要模式为sch且要匹配的单词为school@RishabhRaj我编辑了我的答案,看看它是否符合你的要求。我再一次提醒你,它将从左边寻找第一个事件,但它不会。你的代码将输出
13
,但是OP想要
3
。我猜他想要单词的位置instead@RishabhRaj字体很高兴能帮上忙。旁注:如果您还想检查它是否是一个完整的单词,只需检查
$pattern==$matches[1]
。看见
$a = "this is school of sachin";
if (preg_match('/\b(sch(\w+))\b/', $a, $matches)) {
    echo strlen($matches[2]); // => 3
}
$a = "this is sachinùs school of sachin";
if (preg_match('/\b(sch(\w+))\b/u', $a, $matches)) {
    echo strlen($matches[2]); // => 3
}