2016-09-25 96 views
-3

這是我第一次用Java或任何語言實現正則表達式。我正在嘗試創建兩個不同的正則表達式。第一個正則表達式需要確保:正則表達式英文字母,無特殊字符或數字,32或更大

  1. 的字符串是32或更大的字符
  2. 該字符串僅包含英文字母
  3. 的字符串不包含數字
  4. 的字符串不包含任何特殊字符(!,@,#,$,%,^,&,*,(,), - ,_,+,=,。,,,,<,?,`, {,},[,])
  5. 該字符串不包含任何空格或製表符

第二正則表達式表達需要確保:

  1. 該字符串是包含字母:L或字母R.
  2. L或R必須是大寫

,如果有人能夠解釋這兩個過程,將不勝感激。

+0

有大量的有關整個互聯網正則表達式的信息。例如,Oracle提供了[正則表達式課程](https://docs.oracle.com/javase/tutorial/essential/regex/)。如果你真的想了解它們是如何工作的以及如何編寫它們,你應該閱讀上面鏈接的教程。 –

+0

編程是關於清晰度。由於第2點,點3,4和5是多餘的和不相關的。'[a-zA-Z] {32,}','。* L. *' – Bohemian

回答

1

好吧,我會盡我所能來回答你的問題,並在不假設或猜測的情況下徹底解釋!

這個答案建立在達拉斯S回答的問題上(或者至少有相似之處)。

import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

public class App { 
    public static void main(String[] args) throws Exception { 
     String s = "ThisIsATestStringThatIsBeingUsedInThisExample"; 
     System.out.println("Test String Length: " + s.length()); 
     Pattern p = Pattern.compile("^[A-Za-z]{32,}$"); 
     Matcher m = p.matcher(s); 
     System.out.println("Found = " + (m.find() ? "True" : "Flase")); 
     if (m.find()) { 
      String str = s.substring(m.start(), m.end()); 
      System.out.println("Result = " + str); 
     } 
    } 
} 

解釋的正則表達式的更多,以及它如何涉及到你對你的問題的第一部分: 鑑於你的要求,

該字符串僅包含英文字母

該字符串不包含數字

的字符串不包含任何特殊字符(@,#,$,%,^,&,*,(,), - ,_,+,=, ...,>,<,?,`,〜,/,|,\ {,},[,])

的字符串不包含

這被分組任何空格或製表符到包含'[A-Za-z]'代碼的正則表達式部分。這個正則表達式可以接受任何大寫或小寫字母字符的字符類。

然後,對於部分的指定的:

該字符串是32或更大的字符

這與是的代碼的部分來實現 '{32,}'這告訴找到需要32個或更多(因此在逗號後面沒有後面的數字)字符的匹配。

請注意,正則表達式中的'^'錨定字符串開始處的匹配開始。此外,'$'將匹配的結尾固定在字符串的末尾。

至於你的問題的第2部分,我會簡單地避免使用正則表達式,並按照Dallas S的建議使用contains()調用來查找'L'或'R'字符。

查看here瞭解更多關於java Pattern類的文檔。 查看here瞭解更多關於java Matcher類的文檔。

(請接受這個作爲一個答案,如果它的工作原理/幫助和社區請不要帶走我的反應力量!我看了反饋回答,不建議!)

乾杯

+0

這正是我所期待的。謝謝。 – SamSmith

0

對於第一個問題,可以使用正則表達式:/[a-z]{32,}/i。這設置了一個ignoreCase標誌,允許範圍爲a-z的字符並允許32個或更多字符。用java的方式來使用它會是什麼樣子:

myString.matches("(?i)[a-z]{32,}")

對於第二個,你可以只使用。載方法。

myString.contains("L") || myString.contains("R")

這兩個表達式會返回一個布爾值。

相關問題