2013-06-29 102 views
2

如何在給定文本中的另一個單詞之前或之後獲得單個單詞。 例如:在另一個單詞之前或之後獲取單個單詞

Text = "This is Team One Name" 

,以及如果存在例如中間字之前沒有文字,但digites

Text= "This is 100 one Name" 

我怎樣才能得到100

如何獲取One之前和之後的單詞TeamName?任何正則表達式模式匹配?

回答

4

這應做到:

function get_pre_and_post($needle, $haystack, $separator = " ") { 
    $words = explode($separator, $haystack); 
    $key = array_search($needle, $words); 
    if ($key !== false) { 
     if ($key == 0) { 
      return $words[1]; 
     } 
     else if ($key == (count($words) - 1)) { 
      return $words[$key - 1]; 
     } 
     else { 
      return array($words[$key - 1], $words[$key + 1]); 
     } 
    } 
    else { 
     return false; 
    } 
} 

$sentence = "This is Team One Name"; 
$pre_and_post_array = get_pre_and_post("One", $sentence); 
+0

+1不使用正則表達式! –

+1

@DavidBélanger我希望有人會注意到:) – n1te

+0

完美!與PHP工作順利,應該很容易轉換成其他語言,非常漂亮的代碼,不使用正則表達式,這節省了一些頭痛! –

5

通過捕捉它們變成group

(?:(?<firstWord>\w+)\s+|^)middleWord(?:\s+(?<secondWord>\w+)|$) 
+0

@ m.buettner不錯catch..edited俺們 – Anirudha

+0

@ m.buettner是真傻 – Anirudha

+0

感謝好的正則表達式解決方案,然而這是一個令人頭疼的小組。但確實是一個偉大的啪答聲! –

2
<?php 
$Text = "This is Team One Name"; 
$Word = 'Team'; 
preg_match('#([^ ]+\s+)' . preg_quote($Word) . '(\s[^ ]+)#i', $Text, $Match); 
print_r($Match); 
+0

你忘了匹配'$ Word'周圍的空格。另外'U'會搞砸你的結果(在第二個單詞中只會有一個字符)。只是把它留下。無論如何,這是令人困惑的。如果你想要不誠實,請使用'+?'(但正如我所說的,你甚至不想在這裏不太認真) –

+0

謝謝!我被編輯了 – Winston

相關問題