将过滤器转换为正则表达式

时间:2012-03-16 11:17:33

标签: java regex

我一直在研究是否有任何java转换器库将简单过滤器(例如*something*)转换为正则表达式(.*)something(.*)。 用例是允许最终用户在不知道整个正则表达式语法的情况下创建正则表达式。有没有人知道是否有任何工作或有任何人知道如何完成它。

2 个答案:

答案 0 :(得分:1)

KISS。保持简单,愚蠢。

假设您希望*为零个或多个字符,并且?为单个字符(与大多数操作系统上的文件名相同),您可以使用这样的东西(在浏览器中输入,所以没有经过测试,但你明白了......)

String filterToRegexExpression(String filter) {
    String regexExpression = filter
        .replace('?', '.')
        .replace("*", "(.*)");
    return "^" + regexExpression + "$"; // anchor or not at either end, as desired
}

然后只需创建一个正则表达式实例并使用此转换函数将用户提供的过滤器字符串转换为正则表达式。

以上不能很好地处理其他正则表达式特殊字符,但我认为你可以通过简单地转义任何非字母数字来实现。不过,我将其作为练习留给读者。

我怀疑是否有现成的库,因为这需要定义一个普遍接受但更简单的正则表达式语法 - 而应用程序的需求(以及对用户知识的期望)往往会有很大差异。那时,你几乎可以要求他们输入一个正则表达式,其中有很多可用的例子。

答案 1 :(得分:0)

按照此方法替换所有角色。

你需要:

jakarta-regexp-1.5.jar

使用build.properties或web.xml实现的标准方法

<replaceregexp file="${src}/build.properties"
                         match="OldProperty=*"
                         replace="NewProperty=(.*)"
                         byline="true"/>

在属性文件中将属性名称“OldProperty”的出现替换为“NewProperty”,保留文件$ {src} /build.properties

中的现有值

请参阅http://www.jajakarta.org/ant/ant-1.6.1/docs/en/manual/OptionalTasks/replaceregexp.html了解更多