簡體   English   中英

正則表達式,用於匹配封裝在%中的令牌

[英]Regex for matching token wrapped in %

我嘗試使用PHP查找用戶輸入的文本,該文本可能帶有錯誤鍵入的“令牌”。

有效的“令牌”是用百分號包裝的任意數量的單詞字符-因此%blah% %blah_moreblah% 基本上,我正在尋找用戶可能忘記輸入前導或尾隨'%'的令牌。 我還在尋找有效格式的令牌-到目前為止,在我的代碼中,所有可替換令牌已被替換。

因此,我正在尋找3種情況(借用正則表達式語法): %\\w+%\\w+%\\w+%

用英語來說,我要尋找的是“一個以%開頭和/或以%結尾並且僅包含單詞字符的字符串”

到目前為止,我擁有的正則表達式是: (%*\\w+%*) ,但是您會注意到它與每個單詞都匹配。 我堅持要求比賽至少需要前導或尾隨的%。

編輯 :最初,我嘗試使用自己的正則表達式查找所有3種情況。 但是,我發現在第一種情況下用於查找令牌的正則表達式也將在第二種情況下查找令牌,只是沒有尾隨的%。 例如, /(%\\w+)/%before %both% beth %before %both% be檢查時,將與%before%both匹配。

要匹配用%括起來的令牌,或者在任一側都有%令牌,請使用

(?=\w*%)%*\w+%*

參見另一個正則表達式演示

我向添加了積極的前瞻性,這是您的模式。 (?=\\w*%)僅限於這樣的匹配,即在出現零次或多次單詞字符后出現%情況。

另請注意, %*將匹配零個或多個百分號,可能匹配%%%word%% 如果不是您所需要的,並且需要匹配1或0 % s,則只需將*替換為? 量詞。

嘗試這個:

$input_lines = "Hello this is a %string% with %some_words in it just for demo% purposes.";

preg_match_all("/\s[\w_\-]+%\.?|%[\w_\-]+(%|\s|\.)/", $input_lines, $output_array);

這將輸出:

array(
    0   =>  %string%
    1   =>  %some_words 
    2   =>   demo%
)

請注意,這將捕獲有效的個案以及您要查找的錯別字。

暫無
暫無

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

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