Java 使Perl风格的正则表达式解释器的行为类似于基本的或扩展的正则表达式解释器
我正在写一个帮助学生学习正则表达式的工具。我可能会用Java编写它 其思想是这样的:学生输入正则表达式,工具显示文本的哪些部分将被正则表达式匹配。很简单 但我想支持几种不同的正则表达式风格,例如: 基本正则表达式:grep 扩展正则表达式:egrep Perl正则表达式的子集,包括字符类\w、\s等。 Sed型正则表达式 Java有Java.util.Regex类,但它只支持Perl风格的正则表达式,这是基本和扩展REs的超集。我想我需要的是一种方法,可以接受任何给定的正则表达式,并转义不属于给定风格的元字符。然后我可以把它交给Regex对象,它的行为就像是为所选的重新解释器编写的一样 例如,给定以下正则表达式:Java 使Perl风格的正则表达式解释器的行为类似于基本的或扩展的正则表达式解释器,java,regex,grep,Java,Regex,Grep,我正在写一个帮助学生学习正则表达式的工具。我可能会用Java编写它 其思想是这样的:学生输入正则表达式,工具显示文本的哪些部分将被正则表达式匹配。很简单 但我想支持几种不同的正则表达式风格,例如: 基本正则表达式:grep 扩展正则表达式:egrep Perl正则表达式的子集,包括字符类\w、\s等。 Sed型正则表达式 Java有Java.util.Regex类,但它只支持Perl风格的正则表达式,这是基本和扩展REs的超集。我想我需要的是一种方法,可以接受任何给定的正则表达式,并转义不属于给
^\w+[0-9]{5}-(\d{4})?$
作为基本正则表达式,它将被解释为:
^\\w\+[0-9]\{5\}-\(\\d\{4\}\)\?$
作为扩展正则表达式,它将是:
^\\w+[0-9]{5}-(\\d{4})?$
作为Perl风格的正则表达式,它将与原始表达式相同
正则表达式是否有一个正则表达式,我可以通过正则表达式搜索和替换来引用非元字符?我还能做什么?我可以使用其他Java类吗?或者,您可以使用 这支持以下正则表达式“flavors”: Perl5兼容正则表达式 类AWK正则表达式 全局表达式
或者,您可以使用 这支持以下正则表达式“flavors”: Perl5兼容正则表达式 类AWK正则表达式 全局表达式
查看这篇文章,了解“正则表达式的正则表达式”:
您可以将此作为模块的基础。查看此帖子,了解“正则表达式的正则表达式”:
您可以将此作为模块的基础。我也写过类似的内容: 您可以参与该表达式,并分别匹配每个标记:
[^?+*{}()[\]\\] # literal characters
\\[A-Za-z] # Character classes
\\\d+ # Back references
\\\W # Escaped characters
\[\^?(?:\\.|[^\\])+?\] # Character classs
\((?:\?[:=!>]|\?<[=!])? # Beginning of a group
\) # End of a group
(?:[?+*]|\{\d+(?:,\d*)?\})\?? # Repetition
\| # Alternation
对于每一个匹配,你都可以在目标版本中找到一些合适的替换词典。我写了一些类似的东西: 您可以参与该表达式,并分别匹配每个标记:
[^?+*{}()[\]\\] # literal characters
\\[A-Za-z] # Character classes
\\\d+ # Back references
\\\W # Escaped characters
\[\^?(?:\\.|[^\\])+?\] # Character classs
\((?:\?[:=!>]|\?<[=!])? # Beginning of a group
\) # End of a group
(?:[?+*]|\{\d+(?:,\d*)?\})\?? # Repetition
\| # Alternation
对于每一场比赛,你都可以有一些目标风格的适当替换词典。如果你想让你的学生学习正则表达式,为什么不在网上使用一个免费的工具-正则表达式教练-学习和评估正则表达式非常好 看看这条关于类似问题的线索- 比尔,
~A如果你想让你的学生学习regex,为什么不在网上使用一个免费提供的工具——regex Coach,它非常适合学习和评估regex 看看这条关于类似问题的线索- 比尔,
~A如果您的目标是Unix/Linux系统,为什么只需向每个正则表达式的最终主机付费?例如,使用grep表示BRE,egrep表示ERE,perl表示PCRE,等等?模块唯一需要做的就是UI。我所看到的大多数正则表达式测试人员都使用这种方法的变体
如果您还需要另一个库建议,请查看BRE/ERE/POSIX/AWK部分。它不支持反向引用,所以PCRE/Python/Ruby/JS/Java已经过时了…如果您的目标是Unix/Linux系统,为什么只向每个正则表达式的最终主机进行shell呢?例如,使用grep表示BRE,egrep表示ERE,perl表示PCRE,等等?模块唯一需要做的就是UI。我所看到的大多数正则表达式测试人员都使用这种方法的变体 如果您还需要另一个库建议,请查看BRE/ERE/POSIX/AWK部分。它不支持反向引用,所以PCRE/Python/Ruby/JS/Java已经过时了