2012-06-30 89 views
1

我有一個從用戶那裏得到一個聲明的輸入。根據我的程序的用法,用戶可以輸入一個字符或正則表達式。填寫完該輸入後,用戶必須填寫第二個輸入,即替換文本。如何識別字符串是否是正則表達式?

問題是,用戶可以鍵入.,這相當於一個正則表達式,它匹配任何字符。

下面的代碼是否工作?或者,有什麼解決方案?

Match m = Regex.Match(input, pattern); 
if(m.Success) 
    // it's regex 
else 
    // it's not regex 
+3

不可能,因爲某些字符串(即使它們構成有效的REGEX模式)可能不適用於REGEX使用,並且您不知道這是否是這種情況。 – Utkanos

+0

給他們分隔文本框或複選框。定義特定的格式來識別指定的表達式將永遠有太多的例外,它將無法正常工作。 – MrFox

回答

2

你不能*。

讓我們看看如何Visual Studio的解決了這個問題:

enter image description here

正如你不能告訴用戶是否不希望的內容是一個正則表達式,設計師允許用戶選擇,讓用戶完全控制他們希望執行搜索的方式。如果你希望它是純文本(默認),只需點擊查找下一個。否則,您可以使用其他選項來定製您的搜索。

*好,你有種可以

另一種方法解決這個問題是假設意味着利用一切你支持的技術來搜索和篩選結果的用戶;按「純文本」匹配分組,和「正則表達式」匹配。這效率較低,但由於用戶不主動選擇任何選項,因此可以被認爲更加用戶友好。因此,您首先使用純文本進行搜索,然後在標題「純文本匹配」下返回匹配項,然後假設該字符串爲正則表達式,然後在標題「正則表達式匹配」下返回這些匹配項。

一次你已經將這些顯示給用戶,他們可以選擇他們實際替換的那一個。

+0

我們來看看Google的搜索規則。如果我想要搜索,你會怎麼辦?'你不能*' – miqbal

+0

@miqbal - 我相信這更多的是代表Google上的傢伙做出的設計決定。大多數執行搜索的人不會知道正則表達式是什麼,所以他們從不決定迎合它。沒有什麼能夠阻止你嘗試兩種類型的搜索,並且顯示每個搜索結果對於最終用戶的結果 - 然後他們可以選擇他們想要的哪一個,但它仍然涉及最終用戶的決定。因此,他們要麼首先選擇替換類型,要麼搜索並替換它們的兩種方式,並允許它們選擇實際預期的結果。 – dash

+0

但是,使用Visual Studio的人員非常瞭解regexp。 – miqbal

5

您無法讀取用戶的心意!

如果用戶鍵入...?,則無法知道他們是要匹配文字"...?",還是將它用作正則表達式匹配2-3個字符。

如果我搜索hello?,我可能不希望匹配"hell"但我可能會故意這樣做你不知道你是否不問

給他們一個複選框!

+0

冷靜下來:)詢問用戶是我的第一種方式。 – miqbal

相關問題