我有一個從用戶那裏得到一個聲明的輸入。根據我的程序的用法,用戶可以輸入一個字符或正則表達式。填寫完該輸入後,用戶必須填寫第二個輸入,即替換文本。如何識別字符串是否是正則表達式?
問題是,用戶可以鍵入.
,這相當於一個正則表達式,它匹配任何字符。
下面的代碼是否工作?或者,有什麼解決方案?
Match m = Regex.Match(input, pattern);
if(m.Success)
// it's regex
else
// it's not regex
我有一個從用戶那裏得到一個聲明的輸入。根據我的程序的用法,用戶可以輸入一個字符或正則表達式。填寫完該輸入後,用戶必須填寫第二個輸入,即替換文本。如何識別字符串是否是正則表達式?
問題是,用戶可以鍵入.
,這相當於一個正則表達式,它匹配任何字符。
下面的代碼是否工作?或者,有什麼解決方案?
Match m = Regex.Match(input, pattern);
if(m.Success)
// it's regex
else
// it's not regex
你不能*。
讓我們看看如何Visual Studio的解決了這個問題:
正如你不能告訴用戶是否不希望的內容是一個正則表達式,設計師允許用戶選擇,讓用戶完全控制他們希望執行搜索的方式。如果你希望它是純文本(默認),只需點擊查找下一個。否則,您可以使用其他選項來定製您的搜索。
*好,你有種可以
另一種方法解決這個問題是假設意味着利用一切你支持的技術來搜索和篩選結果的用戶;按「純文本」匹配分組,和「正則表達式」匹配。這效率較低,但由於用戶不主動選擇任何選項,因此可以被認爲更加用戶友好。因此,您首先使用純文本進行搜索,然後在標題「純文本匹配」下返回匹配項,然後假設該字符串爲正則表達式,然後在標題「正則表達式匹配」下返回這些匹配項。
一次你已經將這些顯示給用戶,他們可以選擇他們實際替換的那一個。
如果用戶鍵入...?
,則無法知道他們是要匹配文字"...?"
,還是將它用作正則表達式匹配2-3個字符。
如果我搜索hello?
,我可能不希望匹配"hell"
。 但我可能會故意這樣做。 你不知道你是否不問。
給他們一個複選框!
冷靜下來:)詢問用戶是我的第一種方式。 – miqbal
不可能,因爲某些字符串(即使它們構成有效的REGEX模式)可能不適用於REGEX使用,並且您不知道這是否是這種情況。 – Utkanos
給他們分隔文本框或複選框。定義特定的格式來識別指定的表達式將永遠有太多的例外,它將無法正常工作。 – MrFox