正则表达式英文字母,无特殊字符或数字,32或更大
这是我第一次用Java或任何语言实现正则表达式。我正在尝试创建两个不同的正则表达式。第一个正则表达式需要确保:正则表达式英文字母,无特殊字符或数字,32或更大
- 的字符串是32或更大的字符
- 该字符串仅包含英文字母
- 的字符串不包含数字
- 的字符串不包含任何特殊字符(!,@,#,$,%,^,&,*,(,), - ,_,+,=,。,,,,<,?,`, {,},[,])
- 该字符串不包含任何空格或制表符
第二正则表达式表达需要确保:
- 该字符串是包含字母:L或字母R.
- L或R必须是大写
,如果有人能够解释这两个过程,将不胜感激。
好吧,我会尽我所能来回答你的问题,并在不假设或猜测的情况下彻底解释!
这个答案建立在达拉斯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类的文档。
(请接受这个作为一个答案,如果它的工作原理/帮助和社区请不要带走我的反应力量!我看了反馈回答,不建议!)
干杯
这正是我所期待的。谢谢。 – SamSmith
对于第一个问题,可以使用正则表达式:/[a-z]{32,}/i
。这设置了一个ignoreCase标志,允许范围为a-z的字符并允许32个或更多字符。用java的方式来使用它会是什么样子:
myString.matches("(?i)[a-z]{32,}")
对于第二个,你可以只使用。载方法。
myString.contains("L") || myString.contains("R")
这两个表达式会返回一个布尔值。
有大量的有关整个互联网正则表达式的信息。例如,Oracle提供了[正则表达式课程](https://docs.oracle.com/javase/tutorial/essential/regex/)。如果你真的想了解它们是如何工作的以及如何编写它们,你应该阅读上面链接的教程。 –
编程是关于清晰度。由于第2点,点3,4和5是多余的和不相关的。'[a-zA-Z] {32,}','。* L. *' – Bohemian