簡體   English   中英

正則表達式從查詢字符串的第一個大寫到句子結尾匹配

[英]Regex to match from first uppercase to end of sentence of querystring

我需要找到一個或多個字符串的句子。 這將是從第一個大寫字母或中斷線到終點或中斷線。

我得到的是這個但當然不起作用:

$search_string='example';

$regex = '\[A-Z]{1}[a-z]*\s*'.$search_string.'\s*[a-zA-Z]*\i';

preg_match_all($regex, $content, $matches);  

如果單詞重復多於句子,我將需要檢索兩個句子。 我不確定我是否能很好地解釋它; 請評論,我會再次嘗試解釋。


編輯

我有一個wordpress網站,里面有很多帖子和pdf,docs等。 我使用一個名為swish-e的搜索引號來索引所有並顯示結果。 當有人搜索任何字符串時,我想顯示該字符串的摘要而不是完整的帖子/或pdf。

因此,如果用戶搜索“示例”字符串,我需要顯示所有句子或至少一些單詞示例出現的句子。 這就是為什么我在開始時要求大寫字母和結束時的終點。 我知道這不會是完美的,但至少我需要涵蓋一些場景(大寫字母/斷線等)

希望它更清楚,再次感謝很多

您的search_string應該是preg_quote'd,或者用戶可以使用|等特殊字符來操作結果

$search_string='example';
$regex = '/[A-Z][a-z ]*\b'.preg_quote($search_string,"/").'\b.*?(?:[.!?]|$)/i';
preg_match_all($regex, $content, $matches);  

我假設判決可以終止。 要么 ? 要么 !

您可能不希望為模式分隔符使用\\字符 - 如果它完全起作用,則可能會產生奇怪的行為。 您還可以將i模式修改器應用於您的模式,因此[az]也將匹配大寫字母,[AZ]將匹配小寫字母。

編輯:

這個解決方案更靈活,但它不要求句子以大寫字母開頭。 如果您想使用它,由您決定:

$search_string='example';
$regex = '/[^.!?\n]*\b'.preg_quote($search_string,"/").'\b[^.!?\n]*/i';
preg_match_all($regex, $content, $matches);  

怎么樣:

$search=preg_quote('example');

$regex = '/[A-Z][^\.]+\s+'.$search.'\s[^\.]+/i';

preg_match_all($regex, $content, $matches);  

基本上:

  • 大寫字母
  • 一個或多個不是的東西.
  • 一個或多個空格
  • 你的模式
  • 一個或多個不是點的東西。

應該匹配不包括尾隨的句子.


這是一個更完整的解決方案(檢查和工作)處理'到下一行'的問題,以及被引號括起來的單詞:

$content = "Sentence one. This is an example sentence. Sentence two. Sentence with the word 'example' in it\nthat goes over multiple lines. this isn't starting with a capital letter, for example.";
$search=preg_quote('example');
$regex = '/[A-Z][^\.\n]+\W'.$search.'\W[^\.\n]+/';

preg_match_all($regex, $content, $matches);  
print_r($matches);

打印:

Array
(
    [0] => Array
        (
            [0] => This is an example sentence
            [1] => Sentence with the word 'example' in it
        )
)

這個正則表達式會做你想要的:

$regex = '/[A-Z\n]{1}([a-z]*?\s*)+'.$search_string.'(\s*?[a-zA-Z]*)+[\.\n]/';

在這里你可以看到它是如何工作的:

http://ideone.com/aCJJZ

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM