2015-08-27 42 views
2

我想問題,使周圍一個特定的字符串大膽兩個字像How can I bold two words around a string within a string, but not overlap sentences?如何僅提取字符串中的兩個單詞並用「...」替換其他單詞?

溶液給出

$string = preg_replace("/\\b(\\w+ +){0,2}$query(+\\w+){0,2}\\b/i", 
         '<strong>$0</strong>', 
         $string); 

不過,我想使其他字符串(其中一期工程對我很好,在不加粗的)改爲「...」例如考慮串

$string = 'Then split that sentence into words and add some tags in two words before and after the matching word. 
Since you only have one sentence to work on, you\'d include a check to make sure you didn\'t go out of bounds of the word array. 
Sometimes you need to disable/enable the form element like input or textarea. Jquery helps you to easily make this with setting disabled attribute'; 

會這樣做的樣子,如果我是搜索單詞‘the’,因爲

... 和匹配字之後...字 邊界陣列 ... 禁用/啓用的形式元件 ...

另外一個缺點這個解決方案是它只搜索兩個空格之間的字符串。這可以修改,以便它搜索任何字符串?

最後,可能我們就可能找到搜索的數量進行限制,這樣,如果是爲字符串再次搜索「的」在前文中,我將限制設置爲一個我應該只得到

... 和匹配字後...

+0

不知道,但也許,[''/.*?\b((?:\w+[\p{Zs}\p{P}]+){0,2}the(?:[\p {ZS} \ p {p}] + \ W +){0,2} \ b)中[^!?*/is''](https://regex101.com/r/wW9dF0/3)。或([:。*?\ b +({:\ w +){0,2} \ b)[ ^。!?] *'](https://regex101.com/r/wW9dF0/1)。 –

+0

將搜索限制爲1是使用'preg_match'完成的。 –

+0

@stribizhev,無論您的建議給予'警告:的preg_replace()預計至少3個參數,2給出...' – user3741635

回答

0

正則表達式是強大的,但有時你需要一些比這更多的代碼。 功能sentence_split將做你想做的。

$string = 'Then split that sentence into words and add some tags in two words before and after the matching word. 
Since you only have one sentence to work on, you\'d include a check to make sure you didn\'t go out of bounds of the word array. 
Sometimes you need to disable/enable the form element like input or textarea. Jquery helps you to easily make this with setting disabled attribute'; 
$query = "the"; 


function sentence_split($text, $query, $limit = null, $delimiter=" "){ 
    preg_match_all("/\b([\/\w]+$delimiter){0,2}$query($delimiter\w+){0,2}\b/i", $text, $result); 
    if(!is_null($limit)){ 
    $result[0] = array_slice($result[0], 0, $limit);  
    } 
    return "... <strong>".implode($result[0],"</strong> ... <strong>") . "</strong> ..."; 
} 


var_dump(sentence_split($string, $query); 

輸出:

... 和匹配單詞後 ... 界限字陣列的... 禁用/啓用的形式元件 ...

OR

var_dump(sentence_split($string, $query, 2); 

輸出

... 和匹配字後...... 界字陣列的...

隨着第四個參數「$分隔符」,你可以玩。將分隔符設置爲emtpy字符串是不太可能的,因爲它會打破理想的結果。

但是我們都在這裏玩:)

問題,我看到後發佈爲字符串「禁用/啓用」。對於當前版本的sentence_split這是一個詞。因此它也會輸出之前的單詞。把它看作兩個詞會使整個事情變得更加複雜。

+0

這很棒,但它只適用於在兩個空格之間搜索單詞或字符串的情況,例如,如果搜索單詞「句子「,你會得到兩個結果,但是如果你搜索」sent「或」entenc「或」sentence int「,你將得不到結果。這可以解決嗎? – user3741635

+0

隨着一些額外的工作,這可能是固定的!然而,我提供的功能完全符合你首先要求的功能。分裂沒有空格將非常困難,只有regEx我認爲! 爲什麼downvote? – cb0

相關問題