【问题标题】:Check if whole text is matched by a part of regex? [duplicate]检查整个文本是否与正则表达式的一部分匹配? [复制]
【发布时间】:2017-09-06 11:52:31
【问题描述】:

是否可以通过正则表达式的一部分检查文本是否完全匹配?

我想匹配作为(可能)匹配文本前缀的文本。

因此,例如,我有以下正则表达式:

/etc/tomcat/conf/.*

我想匹配目录/etc/tomcat/conf/ 中的所有文件。我可以通过将完整的文件名与我的正则表达式匹配来做到这一点。但是我需要先进入那个目录,所以我想检查一下是否需要在第一行输入/etc/etc/tomcat

一般情况下可以实现吗?匹配文件的正则表达式将来自外部系统,所以我可能会得到一个正则表达式:

/et..tomcat/con.* 

如果我正确理解正则表达式机器,那应该是可能的,因为/et..tomcat/ 将与/etc/tomcat/ 匹配,但匹配将是负数,因为在那一刻文本将和con.* 部分不会满意。我只需要访问内部信息,文本已被完全使用,但正则表达式没有......

Java 是否提供了检查方法?

【问题讨论】:

  • 查看Matcher 的文档:docs.oracle.com/javase/8/docs/api/java/util/regex/Matcher.htmlhitEnd() 方法可能就是你要找的。​​span>
  • @VadimLanda 谢谢,我已经做了一个快速测试,这正是我所需要的
  • @LucasTrzesniewski 是的,这个问题的答案正是我所需要的。棘手的部分是,我没有寻找“部分映射”,因为我认为它只是整个正则表达式匹配文本的一部分,而不是相反的情况。

标签: java regex


【解决方案1】:

只是一个过于复杂的正则表达式。由于想法是针对单个子目录,因此可以这样做:

Path full = Paths.get("/etc/tomcat/conf");

assert okay(full, Paths.get("/etc")); // -1-
assert !okay(full, Paths.get("/and/so/on")); // -2-

boolean okay(Path full, Path input) {
    try {
        input.relativize(full); // -1- "tomcat/conf"
        return true;
    } catch (IllegalArgumentException e) {
        return false; // -2-
    }
}

尽管毫无例外地添加更多代码可能是值得的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-27
    • 2012-12-16
    • 2015-04-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多