我正在尝试用Java编写一个带有所有两位数字的正则表达式(两位数字不能以0开头)并且前面跟着一个字符。
例如,我想匹配以下字符串中的数字30:
但不想在以下方面:
我正在尝试使用环顾四周来实现这一点,而我到目前为止最接近的是:
(?<!\w)(1[2-9]|[2-9][0-9])(?!([\w]))
两位数字不能以0开头,我不想匹配三位数字内的2位数字。
答案 0 :(得分:2)
您可以使用以下正则表达式:
(?<!\S)[1-9]\d(?!\d)|(?<!\d)[1-9]\d(?!\S)
在Java字符串文字中定义正则表达式模式时,请记住要加倍反斜杠。
模式匹配:
(?<!\S)
- 下一个数字必须以空格或字符串开头[1-9]\d
- 1到9之间的数字,然后是任意一个数字(?!\d)
- 两个数字不能跟另一个数字|
- 或(?<!\d)
- 在...之前不能有数字[1-9]\d
- 从1到9的数字,然后是任意一个数字(?!\S)
- 应该跟一个空格或字符串结尾。答案 1 :(得分:0)
以下代码只是测试了Wiktor在Java中的评论:
import java.text.SimpleDateFormat;
import java.util.Locale;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class TestIt
{
public static void main (String args[])
throws Exception
{
String test1 = "character30 wordstart";
String test2 = "wordstart 30character";
String test3 = "the number 30 is here";
String failTest = "character30character";
String regex = "\\b\\d{2}|\\d{2}\\b";
Pattern pat = Pattern.compile(regex);
Matcher match = pat.matcher(test1);
System.out.println("test1: " + match.find());
match = pat.matcher(test2);
System.out.println("test2: " + match.find());
match = pat.matcher(test3);
System.out.println("test3: " + match.find());
match = pat.matcher(failTest);
System.out.println("failTest: " + match.find());
}
}
结果:
test1: true
test2: true
test3: true
failTest: false