特定字符串格式
问题描述:
我要验证Java中的字符串,其中包含以下顺序:特定字符串格式
SAVA950720HMCLZL04
也就是说,四个字母,六个数字,六个字母和最后两个数字。
我正在阅读有关正则表达式的内容,但我无法理解如何实现它。
我做了这种方法来验证前四个字母。
public void name(String s){
Pattern pat=Pattern.compile("[a-zA-z]{4}");
Matcher mat=pat.matcher(curp);
if(mat.matches()){
JOptionPane.showMessageDialog(null, "Validating");
}else{
JOptionPane.showMessageDialog(null, "Check your data. please", "error",JOptionPane.ERROR);
}
}
我想我可能是错的,因为我不知道如何正确地执行它,什么可能是正确的解决我的问题任何帮助?
答
-
Matcher.match
尝试将整个字符串与模式匹配,并且您当前的模式仅验证4个字符。这里是你可以做,以测试你的正则表达式是什么:- 您可以在正则表达式年底建成
.*
相匹配的字符串的其余 - 您也可以使用
Matcher.find
或Matcher.lookingAt
来匹配字符串
- 您可以在正则表达式年底建成
你的图案具有一个错字,第二间隔过宽
A-z
VSA-Z
答
试试这个正则表达式:
[a-zA-Z]{4}\d{6}[a-zA-Z]{6}\d{2}
以上将验证为四个字母,六个数字,六个字母和最后两个数字。
你的情况
答
正则表达式是:
[a-zA-Z]{4}[0-9]{6}[a-zA-Z]{6}[0-9]{2}
找到匹配很简单:
public void name(String s){
String pattern = "[a-zA-Z]{4}[0-9]{6}[a-zA-Z]{6}[0-9]{2}";
boolean match = s.matches(pattern);
if (match) {
...
} else {
...
}
}
你可以从这里https://regex101.com/
测试正则表达式编辑
我使用[0-9] inste \ d的广告,以确保只有数字的安全匹配。更多详细信息可以在这里找到:Should I use \d or [0-9] to match digits in a Perl regex?
答
package com.*._42635543;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
Pattern pat = Pattern.compile("[A-Za-z]{4}[0-9]{6}[A-Za-z]{6}[0-9]{2}");
if (pat.matcher("SAVA950720HMCLZL04").matches()) {
System.out.println("match");
} else {
System.out.println("no match");
}
if (pat.matcher("SAVA950720HMCLZL045").matches()) {
System.out.println("match");
} else {
System.out.println("no match");
}
}
}
产生
match
no match
注意['[AZ]'匹配不仅仅是字母(http://*.com/a/29771926/3832970 )。 'matches()'方法锚定正则表达式,所以你只能匹配4个字符的字符串。所以,你需要'匹配(“[A-ZA-Z] {4} [0-9] {6} [A-ZA-Z] {6} [0-9] {2}”)' –
'Az '应该是'AZ'。为了表示数字,可以使用'[0-9]'或'\ d'(在字符串文字中,你需要另外转义'''',所以它看起来像'“\\ d”')。 'matches()'检查正则表达式是否可以匹配整个字符串,而不仅仅是它的一部分。 – Pshemo