2013-12-18 62 views
-2
$a = "this is school of sachin"; 
$pattern = "sch"; 

我想從末尾獲取匹配模式的位置。例如在這種情況下,sch匹配school - 所以模式的位置應該是3,即從結尾:如何獲取從末尾匹配的字符串中的模式位置

如下所述,詞學校的索引以這種方式排列,所以如果匹配sch比從匹配的單詞(學校)和該模式的開始(從最後)開始的位置應該返回成功。

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

^---^ 

匹配的模式。

我試過strpos(),但無法達到我的目的。

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

根據我的問題,strpos()的輸出應該是3。

+0

'這樣的位置應該是3' - 你能解釋一下嗎? –

+1

@AmalMurali檢查我的問題。我的意思是說,如果sch與學校匹配,那麼我將比較匹配模式的最後一個索引。 –

+0

@AmalMurali我希望你明白我的問題? –

回答

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; 
    } 
} 
?> 

OR

<?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)"); 
    } 
} 
?> 
+0

有沒有更簡單的方法? –

+0

@RishabhRaj我已經更新了我的答案。我認爲第二種方法很簡單。 – 2013-12-18 14:15:30

+0

完美,但它會適用於非英文字符? http://3v4l.org/OPeu8這裏字符串有一個荷蘭字符,因此你的代碼不起作用 –

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; 

注意,它會發現第一次出現,從左邊開始,因此,例如 'schschool'會輸出6.

+0

http://3v4l.org/DYWAP它不起作用 –

+0

你期望從這個例子中得到什麼結果? – Kei

+0

謝謝你的答案kei但我想輸出3。 –

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; 
    } 
    } 
+1

它不會。你的代碼會輸出'13',但是OP需要'3'。 –

+0

我猜他想要的是單詞的位置 – 2013-12-18 14:16:18

+0

現在它返回3 – 2013-12-18 14:39:12

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 
} 
+0

@RishabhRaj:很高興得到了幫助。旁註:如果你還想檢查它是否是一個完整的單詞,你可以簡單地檢查'$ pattern == $是否匹配[1]'。請參閱[示例](https://eval.in/80610)。 –

相關問題