2016-02-16 98 views
0

我想寫正則表達式來限制某些字符。要限制的字符取決於各種用戶的要求。正則表達式來限制某些特殊字符

我想使用這個正則表達式 - [(char1|char2|char3|...)$] 注意:每個字符將來自需求。

如果用戶輸入的字符串匹配任何字符,我會返回true。現在, 我想知道的是天氣這個表達式適用於所有條件嗎?

例如 - requirement1 = .:, requirement2 = .:&%

我將concatinate在每個字符之間|,然後我將產生在Java正則表達式。這適用於我的要求1,但不適用於要求2。

我的Java代碼示例,

String requirement = ":>&%"; 
String regExp1 = null; 
for (int i = 0; i < requirement.length(); i++) { 
    regExp1 = "[(" + requirement.charAt(i); 
    if (i - 1 != requirement.length()) { 
     regExp1.concat("|"); 
    } 
} 
if (regExp1 != null) { 
    regExp1.concat(")]$"); 
} 
Pattern p = Pattern.compile(regExp); 
Matcher m = p.matcher(arg); 
if (m.find()) 
    return true; 
else 
    return false; 

我怎麼能產生標準的正則表達式?

+0

請添加應該生成正則表達式的代碼。 – Manu

+0

你需要記住特殊字符,點是正則表達式中的一個特殊字符...... – f1sh

+0

'[(char1 | char2 | char3 | ...)$]'是對字符類與分組的誤解。 [使用不需要的字符類會導致意外問題。](http://stackoverflow.com/questions/34765780/regex-expression-not-working-with-once-or-none/34766090#34766090) –

回答

1

如果你想「其中的一個字符」括號足夠好。不需要括號和管道。

類似這樣的:[.:,][.:&%]可能工作。如果想要它們一次或多次,則必須在您的正則表達式結尾處有+(即:[.:&%]+)。

正如在評論中說的,提防特殊字符(如點,這意味着在正則表達式中的任何字符)。

+0

謝謝你很多Django Janny。你的答案是完美的。 –

+0

@ user3778890請[接受答案](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235)表示這已解決。你這樣做也可以獲得2點聲望點。 – user1803551

+0

@SwathiN不用客氣,user1803551是對的,你能接受anwser嗎? –