使用正则表达式的不可打印字符匹配



我正在尝试编写一个ant任务,该任务删除了与正则表达式匹配的所有行。

我现在正在做的事情:

<replaceregexp byline="true" flags="g">
    <regexp pattern="import com.xyz.abc.123.*"/>
    <substitution expression=""/>
    <fileset dir="/my/custom/directory">
        <include name="*.java"/>
    </fileset>
</replaceregexp>

这留下了一条空白,没有删除它,这对我来说是可以理解的。但是,当我对此修改以下时:

<replaceregexp byline="true" flags="g">
    <regexp pattern="import com.xyz.abc.123.*\n"/>
    <substitution expression=""/>
    <fileset dir="/my/custom/directory">
        <include name="*.java"/>
    </fileset>
</replaceregexp>

它甚至不匹配正则。关于如何攻击这个问题有什么建议吗?

另外一个菜鸟问题:当我使用此正则 import com.xyz*时,它无法匹配模式,当前的正则是匹配的。prefix*是否以prefix的前缀找到图案?

ps:我不想运行另一个任务以删除所有空线,因为这会弄乱格式化并会删除我想要的空线。

您正在使用\n进行换行,而应该使用n。这与Unix线路断开相匹配。如果您有兴趣删除线路断路,无论是Windows还是Unix,也可以使用r?n。确保不使用标志byline="true"。这将逐行与您的文本匹配,但不包括线路断开:

<replaceregexp byline="false" flags="g">
    <regexp pattern="import com.xyz.abc.123r?n"/>

您可能已经看到,点字符.在这里逃脱了。点字符在正则是"每个角色"。因为您实际上想在这里匹配一个点,所以您需要逃脱它。


*字符说,上述令牌(通常一个字母)可以匹配0次或大于0次(但贪婪)。在您的情况下,prefix*,以下样本将匹配:

prefi
prefix
prefixxxxx
prefixxxxxxxxx

如果您想将此术语分组在一起,则可以使用捕获或非捕获组:

(prefix)*    -> capturing group
(?:prefix)*  -> non-capturing group

我看到了,您已经使用了.*。当您停用byline时,使用.*可能是危险的,因为它匹配任何字符和尽可能多的字符(可能直到文件末尾)。要收集最少的角色,您可以在此之后使用问号:.*?

如果您的导入语句具有语句的变量(但在Line Break结束),则可以使用以下正则表达式:

<regexp pattern="import com.xyz.abc..*?r?n"/>

这将匹配以下任何一个

import com.xyz.abc.  [ line break ]
import com.xyz.abc.a  [ line break ]
import com.xyz.abc.bc;  [ line break ]
import com.xyz.abc.def23fewvgsdvds;;;;  [ line break ]

相关内容

  • 没有找到相关文章

最新更新