Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.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
Bash中Java格式的正则表达式_Java_Regex_Bash - Fatal编程技术网

Bash中Java格式的正则表达式

Bash中Java格式的正则表达式,java,regex,bash,Java,Regex,Bash,我要检查大量正则表达式,它们以Java/JavaScript正则表达式格式输出,如图所示: \d{7}|\d{8} [a-zA-Z]\d{8} [a-zA-Z]\d{3}-\d{3}-\d{2}-\d{3}\d[0|1] 鉴于我对Bash很满意,但是有一些小技巧我可能从来没有想到过,我想知道是否有一种方法可以使用测试字符串对这个特定的RegEx格式进行评估 我已经尝试了许多grep,并且使用我知道通过RegEx测试程序传递的数据进行评估 在使用bash正则表达式时,我可以正确地计算这些字符串,

我要检查大量正则表达式,它们以Java/JavaScript正则表达式格式输出,如图所示:

\d{7}|\d{8}
[a-zA-Z]\d{8}
[a-zA-Z]\d{3}-\d{3}-\d{2}-\d{3}\d[0|1]
鉴于我对Bash很满意,但是有一些小技巧我可能从来没有想到过,我想知道是否有一种方法可以使用测试字符串对这个特定的RegEx格式进行评估

我已经尝试了许多grep,并且使用我知道通过RegEx测试程序传递的数据进行评估

在使用bash正则表达式时,我可以正确地计算这些字符串,但是我无法将服务器输出这些字符串的方式更改为我知道如何在bash中计算的格式


有什么想法吗?

我建议编写一个执行检查的命令行工具。然后可以从bash脚本调用此工具

使用,这里有一些东西可以满足您的需要:

import java.io.Console;
import java.util.regex.Pattern;
import java.util.regex.Matcher;

public class RegexTestHarness {
    public static void main(String[] args) {
        try{
            Pattern pattern = Pattern.compile(args[1]);
            Matcher matcher = pattern.matcher(args[2]);

            boolean found = false;
            while (matcher.find()) {
                System.out.println(matcher.group() + ", position " + matcher.start() + ":" + matcher.end() + "\n");
                found = true;
            }
            if (!found) {
                System.out.println("\nNo match found.");
                System.exit(1);
            }
        }
        catch (Exception e) {
            System.out.println("\nCaught an exception. Description: " + e.getMessage());
            System.exit(2);
        }
    }
}
要检查是否存在匹配项,可以使用以下脚本:

#!/bin/bash
if java RegexTestHarness "my_regex" "my_input_string"; then
    echo "Expression matches"
else
    echo "Expression doesn't match"
fi

要检查特定结果,您可以捕获命令的输出并在脚本中进行处理。

我建议编写一个执行检查的命令行工具。然后可以从bash脚本调用此工具

使用,这里有一些东西可以满足您的需要:

import java.io.Console;
import java.util.regex.Pattern;
import java.util.regex.Matcher;

public class RegexTestHarness {
    public static void main(String[] args) {
        try{
            Pattern pattern = Pattern.compile(args[1]);
            Matcher matcher = pattern.matcher(args[2]);

            boolean found = false;
            while (matcher.find()) {
                System.out.println(matcher.group() + ", position " + matcher.start() + ":" + matcher.end() + "\n");
                found = true;
            }
            if (!found) {
                System.out.println("\nNo match found.");
                System.exit(1);
            }
        }
        catch (Exception e) {
            System.out.println("\nCaught an exception. Description: " + e.getMessage());
            System.exit(2);
        }
    }
}
要检查是否存在匹配项,可以使用以下脚本:

#!/bin/bash
if java RegexTestHarness "my_regex" "my_input_string"; then
    echo "Expression matches"
else
    echo "Expression doesn't match"
fi

要检查特定结果,您可以捕获命令的输出并在脚本中处理它。

使用bash的regex很难做到。作为一个快速测试,我将使用Gnu grep和-P选项(Perl regexp)。然而,这只有在您遇到Java的regexp所特有的东西时才会起作用@Sir_Athos方法是处理Java所做的一切的唯一方法。是的,当然,我的想法有点牵强,我正在寻找一个快速解决问题的方法(这总是一个坏主意)。我将使用他的解决方案,因为这样可以避免我编写解释器。用bash的正则表达式很难做到。作为一个快速测试,我将使用Gnu grep和-P选项(Perl regexp)。然而,这只有在您遇到Java的regexp所特有的东西时才会起作用@Sir_Athos方法是处理Java所做的一切的唯一方法。是的,当然,我的想法有点牵强,我正在寻找一个快速解决问题的方法(这总是一个坏主意)。我同意他的解决方案,因为这样可以避免我写口译员。谢谢。我将采用类似的方法。我尝试了一个相当牵强的想法,并使它在我脑海中变得比实际更简单。谢谢谢谢我将采用类似的方法。我尝试了一个相当牵强的想法,并使它在我脑海中变得比实际更简单。谢谢