我正在尋找一種方法來提取搜索中給定字詞任一側的X個字符。提取字符串中給定搜索字符串周圍的X個字符
例如,如果用戶輸入「inmate」作爲搜索詞,並且MySQL查詢找到帖子內容中包含「inmate」的帖子,我想返回不是帖子的全部內容,但是隻要在它的兩邊放上幾個單詞就可以讓用戶看到帖子的主旨,然後他們可以決定是否要繼續閱讀帖子並全部閱讀。
我正在使用PHP。
謝謝!
我正在尋找一種方法來提取搜索中給定字詞任一側的X個字符。提取字符串中給定搜索字符串周圍的X個字符
例如,如果用戶輸入「inmate」作爲搜索詞,並且MySQL查詢找到帖子內容中包含「inmate」的帖子,我想返回不是帖子的全部內容,但是隻要在它的兩邊放上幾個單詞就可以讓用戶看到帖子的主旨,然後他們可以決定是否要繼續閱讀帖子並全部閱讀。
我正在使用PHP。
謝謝!
你可能無法用正則表達式完全解決這個問題。還有的詞與詞之間的其他字符可能性太多......
不過你可以試試這個正則表達式:
((?:\S+\s*){0,5}\S*inmate\S*(?:\s*\S+){0,5})
在這裏看到:rubular
你也可能要排除某些字符,因爲他們不算作單詞。現在,正則表達式計算任何由空格包圍的非空格字符序列作爲單詞。
僅匹配真實的話:
((?:\w+\s*){0,5}<search word>(?:\s*\w+){0,5})
但這裏任何非單詞字符(「等),剎車匹配
所以,你可以去...
((?:[\w"',.-]+\s*){0,5}["',.-]?<search word>["',.-]?(?:\s*[\w"',.-]+){0,5})
這也會匹配5個單詞,並在搜索詞的前後加上「',.-之一。
在PHP中使用它:
$sourcestring="For example, if a user enters \"inmate\" as a search word and the MySQL";
preg_match_all('/(?:\S+\s*){0,5}\S*inmate\S*(?:\s*\S+){0,5}/s',$sourcestring,$matches);
echo $matches[0][0]; // you might have more matches, they will be in $matches[0][x]
爲了增加morja的答案,可以使用PHP的preg_match從MySQL中選擇字符串:http://php.net/manual/en/function.preg-match.php。 – bozdoz
謝謝,今天晚些時候我有機會的時候我會試一試。我很欣賞你們已經採取回答這個問題的時間了! –
我試過了,它有時候在Rubular上工作...嗯...我試圖在PHP中實現它,我似乎無法將我的頭包裹在它周圍...任何人都可以指向正確的方向嗎? –
我會用這個正則表達式PHP這也需要UTF8字符考慮
'~(?:[\p{L}\p{N}\']+[^\p{L}\p{N}\']+){0,5}<search word>(?:[^\p{L}\p{N}\']+[\p{L}\p{N}\']+){0,5}~u'
在這種情況下「〜」是定界符變質'u'結尾標識正則表達式是UTF8解釋的。
請參閱有關Unicode的正則表達式標識文檔瀏覽:
這也可以幫助你:http://stackoverflow.com/q/1436582/1066234 –