正则表达式英文字母,无特殊字符或数字,32或更大

问题描述:

这是我第一次用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

好吧,我会尽我所能来回答你的问题,并在不假设或猜测的情况下彻底解释!

这个答案建立在达拉斯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

对于第一个问题,可以使用正则表达式:/[a-z]{32,}/i。这设置了一个ignoreCase标志,允许范围为a-z的字符并允许32个或更多字符。用java的方式来使用它会是什么样子:

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

对于第二个,你可以只使用。载方法。

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

这两个表达式会返回一个布尔值。