Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用正则表达式检查字符串的开头是否与模式匹配_Java_Regex - Fatal编程技术网

Java 使用正则表达式检查字符串的开头是否与模式匹配

Java 使用正则表达式检查字符串的开头是否与模式匹配,java,regex,Java,Regex,我正在从一个.txt文件中读取行,我需要检查每一行是否“有效” 有效行以-2和2(含-2)之间的数字开头,后跟一个空格,然后可能是文本 “-1这是有效的。” “0这也是” “-2和这个” “2和这个” “-1这不是。” “-23也不是这个” 我想用正则表达式来实现这个,但是我很难让它正常工作。我对正则表达式很不熟悉。这是我的密码: public static List<Sentence> readFile(String filename) { List<Se

我正在从一个.txt文件中读取行,我需要检查每一行是否“有效”

有效行以-2和2(含-2)之间的数字开头,后跟一个空格,然后可能是文本

  • “-1这是有效的。”
  • “0这也是”
  • “-2和这个”
  • “2和这个”
  • “-1这不是。”
  • “-23也不是这个”
我想用正则表达式来实现这个,但是我很难让它正常工作。我对正则表达式很不熟悉。这是我的密码:

public static List<Sentence> readFile(String filename) {
        List<Sentence> sentences = new LinkedList<>();

        Pattern pattern = Pattern.compile("-[0-2] abc");
        Matcher matcher;
        try (BufferedReader br = new BufferedReader(new FileReader(filename))) {

            while (br.ready()){
                matcher = pattern.matcher(br.readLine());
                if (matcher.matches()){
                    System.out.print("matches ");
                }
            }

        } catch (IOException e){
            e.printStackTrace();
        }

        return sentences;

    }
公共静态列表读取文件(字符串文件名){
列出句子=新建链接列表();
Pattern=Pattern.compile(“-[0-2]abc”);
匹配器匹配器;
try(BufferedReader br=new BufferedReader(new FileReader(filename))){
while(br.ready()){
matcher=pattern.matcher(br.readLine());
if(matcher.matches()){
系统输出打印(“匹配”);
}
}
}捕获(IOE异常){
e、 printStackTrace();
}
返回句子;
}

这不起作用(不奇怪)。有人能帮我找到正确的正则表达式吗?

您可能正在寻找类似以下的正则表达式:

^(0|-?[1-2]) .*

^
符号匹配行首,
(0 |…)
匹配
0
或以下表达式,
-?
匹配0或1次出现的
-
[1-2]
匹配1或2,
匹配空白,和*匹配除换行符以外的0个或更多项。

您可能正在寻找类似以下内容的正则表达式:

^(0|-?[1-2]) .*

^
符号匹配行首,
(0 |…)
匹配
0
或以下表达式,
-?
匹配0或1次出现的
-
[1-2]
匹配1或2,
匹配空白,而*只匹配0个或多个换行符。

如果我没有弄错你的问题,你需要这样的模式:

-?[0-2]\s[\w\d\s]*


试试RegExr,它是一个非常好的基于web的工具,用于找出regex模式。

如果我没有误解您的问题,您将需要以下内容作为您的模式:

-?[0-2]\s[\w\d\s]*


试试RegExr,它是一个非常好的基于web的工具,用于找出regex模式。

如果测试字符串是逐行分隔的,那么您可以逐行验证测试字符串

foreach (string line in lines)
{
    match = Regex.Match(line, @"^(-?[1-2]\s.*|0\s.*)", RegexOptions.IgnoreCase);
    if (match.Success)
    {
        MessageBox.Show(match.Groups[1].Value);
    }
}
它验证测试字符串,并捕获有效字符串

如前所述,它仅在测试字符串被行分隔时起作用

修改正则表达式以满足由“\n”分隔的完整字符串

应该是

string regExp = @"(-?[1-2]\s.+[\n]{1}|(?<!-)0\s.+[\n]{1})";
MatchCollection matches = Regex.Matches(longstr, regExp, RegexOptions.IgnoreCase);
foreach(Match match in matches)
{
    if (match.Success)
    {
        MessageBox.Show(match.Groups[1].Value);
    }
}
string regExp=@”([1-2]\s.+[\n]{1}|)(
-0无效,如果从表达式中删除
^


因此,
(?需要忽略
-
作为第一个字符,当以下字符为
0

时,如果测试字符串逐行分隔,则可以逐行验证测试字符串

foreach (string line in lines)
{
    match = Regex.Match(line, @"^(-?[1-2]\s.*|0\s.*)", RegexOptions.IgnoreCase);
    if (match.Success)
    {
        MessageBox.Show(match.Groups[1].Value);
    }
}
它验证测试字符串,并捕获有效字符串

如前所述,它仅在测试字符串被行分隔时起作用

修改正则表达式以满足由“\n”分隔的完整字符串

应该是

string regExp = @"(-?[1-2]\s.+[\n]{1}|(?<!-)0\s.+[\n]{1})";
MatchCollection matches = Regex.Matches(longstr, regExp, RegexOptions.IgnoreCase);
foreach(Match match in matches)
{
    if (match.Success)
    {
        MessageBox.Show(match.Groups[1].Value);
    }
}
string regExp=@”([1-2]\s.+[\n]{1}|)(
-0无效,如果从表达式中删除
^


因此,
(?需要忽略
-
作为第一个字符,当下面的字符是
0

“-0有效吗?”
不,只有0。对不起,应该包括这个。谢谢。另外,文本可以包含哪些字符(在末尾)包含?将
abc
替换为
\\w*
空格后的字符可以是任何字符,也可以是任何字符
“-0是否有效?”
否,仅为0。对不起,应该包含该字符。谢谢。另外,文本(结尾)可以包含哪些字符包含?将
abc
替换为
\\w*
空格后的字符可以是任何字符,也可以是任何字符。下一个投票人是否愿意解释错误-我非常乐意修复它。这工作正常,谢谢(我没有下一个投票)->也谢谢你的解释。支持率较低的选民是否愿意解释问题所在?我非常乐意解决。这很有效,谢谢(我没有支持率较低)->也谢谢你的解释。这也会匹配
-0
哦,对了,错过了,谢谢狄龙的更正。这也会匹配
-0
哦,对了,错过了,谢谢狄龙的更正。