$a = "this is school of sachin";
$pattern = "sch";
我想从最后得到匹配模式的位置。例如,在这种情况下,sch
匹配school
- 因此模式的位置应为3,即从结尾开始:
如下所述,单词school的索引是以这种方式排列的,所以如果sch
的匹配成功,则匹配从匹配(学校)的单词结尾到开头的位置应该返回模式(从结尾)。
s c h o o l
5 4 3 2 1 0
^---^
匹配模式。
我已经尝试strpos()
,但无法满足我的目的。
echo strpos($a, $pattern); // this is wrong
根据我的问题,strpos()的输出应为3。
答案 0 :(得分:2)
<?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;
}
}
?>
或强>
<?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)");
}
}
?>
答案 1 :(得分:1)
没有Sharanya提出的整个方法
$haystack = 'this is a verygood school of sachin';
$pattern = 'sch';
$match = strstr($haystack, $pattern);
for ($i = 0;$i < strlen($match);$i++) {
if ($match[$i] == ' ') {
$match = substr($match, 0, $i);
break;
}
}
$result = strlen($match) - strlen($pattern);
echo $result;
请注意,它会从左侧开始发现FIRST事件,因此例如'schschool'将输出6。
答案 2 :(得分:1)
注意 - 这也会告诉您找到的单词是否为完整单词
看看 - http://3v4l.org/i94Lr
$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;
}
}
答案 3 :(得分:1)
使用带有word boundaries(\b
)的正则表达式查找与提供的模式匹配的单词,然后使用捕获组捕获模式后的所有内容。然后,只需返回该字符串的长度:
$a = "this is school of sachin";
if (preg_match('/\b(sch(\w+))\b/', $a, $matches)) {
echo strlen($matches[2]); // => 3
}
如果您还想考虑非英文字符,则可以使用u
修饰符:
$a = "this is sachinùs school of sachin";
if (preg_match('/\b(sch(\w+))\b/u', $a, $matches)) {
echo strlen($matches[2]); // => 3
}