我遇到了一个需要验证字符串的特殊情况。
字符串必须满足某些标准才能进一步移动。这是:
字符串应以Integer值开头,其长度应为> 1 和< Ñ
然后是字母,其长度应为0到m(这意味着字母表可能存在或可能不存在)
myString.charAt(0)
正在给我。
如何验证它仅包含< n整数?
如何通过>验证它? 0和< n整数后跟0到< m字母?
我可以获得正则表达式来解决它吗?
答案 0 :(得分:2)
这应该有效
^\d{1,n - 1}[A-Za-z]{0,m - 1}$
如您所愿< n
。所以它应该是n-1
JAVA中的代码
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexMatches
{
static boolean isValid(String x, int n, int m)
{
String pattern = "^\\d{1," + (n - 1) + "}[A-Za-z]{0," + (m - 1) + "}$";
Pattern r = Pattern.compile(pattern);
Matcher t = r.matcher(x);
return t.find();
}
public static void main( String args[] ){
// String to be scanned to find the pattern.
String line = "123abcdef";
int n = 4, m = 4;
if (isValid(line, n, m)) {
System.out.println("FOUND");
} else {
System.out.println("NOT FOUND");
}
}
}
n
的值应大于或等于2
且m
的值应大于1
<强> IDEONE DEMO 强>
答案 1 :(得分:1)
您可以将其与非常简单的正则表达式匹配:
^(\d+)([A-z]*)$
1位或更多位数,后跟0或更多字母。您可以非常轻松地抓取捕获组,以确切地找出字符串中有多少位数或多少个字母。如果您提前知道m
和n
作为特定数字,那么将它们插入正则表达式中,如下所示:
对于n = 4且m = 3,
^(\d{1,4})([A-z]{0,3})$
这将与0000aaa
匹配,但不会与aaa
或000aaaa
匹配。
答案 2 :(得分:0)
到目前为止我们已经看到的解决方案的另一种变体。所有答案都非常好。这也应该与unicode匹配。
<强>模式强>
\b\p{N}{1,n}\p{L}{0,m}\W
源代码
public static void matchNumeroAlphaString(){
int n = 3;
int m = 3;
String text =
"John32 54writes about this, 444 and 456Joh writes about that," +
" and John writes #about 9EveryThing. ";
String patternString = "\\b\\p{N}{1," + n + "}\\p{L}{0," + m + "}\\W";
Pattern pattern = Pattern.compile(patternString);
Matcher matcher = pattern.matcher(text);
while(matcher.find()) {
System.out.println("Found: " + matcher.group());
}
}
<强>输出强>
发现:444
发现:456Joh