簡體   English   中英

找不到正確的正則表達式

[英]Can't find the right regex

我花了最后4個小時試圖找出如何編寫一些正則表達式的表達式,但是每次我認為得到它時,我的測試都會失敗...有人可以幫助我還是給我一些提示,讓我走上正確的軌道? 我面前有一張備忘單。

我需要以下內容:一個正則表達式,可以給我每個單詞一個帶有?的字符串? 對此。

示例: this is a? example sentence? to test the regex? this is a? example sentence? to test the regex?
我想要asentenceregex作為結果。

我想出的最好的正則表達式是/\\w\\?/

一個僅考慮完全由ASCII字母組成的單詞的幼稚正則表達式可以是

\b[A-Za-z]+(?=\?)

\\b 詞邊界錨點確保整個詞都匹配,並且(?=\\?) 超前斷言斷言緊隨其后的是一個問號,而沒有使該問號成為匹配的一部分。

我想說的是,首先,您可以將一個單詞定義為\\S+ (您沒有定義一個單詞,因此我將繼續使用它。更改為其他內容,例如,如果需要,可以使用限制性更強的字符類,也許例如\\w+ ),甚至可能是\\b\\S+\\b

由此,您需要檢查? ,可以通過正向超前(?= ... )

現在,您可以從(?=\\?)開始,但這將一次檢查正則表達式中的一個位置,並且如果使用?將不可行? 是一個單詞的開頭。 因此,在找到?之前,還需要允許任意數量的字符(甚至0) ? (?=.*\\?)

現在, .*將使正則表達式可以跨單詞,這是不理想的,將其替換為\\S*

\b(?=\S*\?)\S+

而且您實際上可以刪除最后一個\\b因為一個單詞不會比\\S更進一步。

regex101演示

正則表達式如下

 $string = "this is a? example sentence? to test the regex?"; 

 $output_array = array();
 preg_match_all("/\b([a-zA-Z]*)\?/", $string, $output_array);

 print_r($output_array[1]);

這將返回所有沒有?的比賽? 在末尾。

暫無
暫無

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

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