【问题标题】:How to convert regex into an extglob expression?如何将正则表达式转换为 extglob 表达式?
【发布时间】:2014-11-20 11:20:48
【问题描述】:

我想将正则表达式转换成 glob

我在看jakarta oro 但我找不到适合我需要的方法。它编译正则表达式并返回其 glob 等价物

都是Type-3语法,理论上应该是可以的。

不幸的是,我使用 JDK5 受到了限制。

【问题讨论】:

  • @sol4me 那​​是 glob -> 正则表达式
  • 我不认为 glob 有任何支持,例如环视。所以这在一般情况下是不可能的。如果您想了解特定案例的详细信息,则必须更加...具体。
  • 我不知道形式语法理论的细节,但是如果“glob”是指*匹配任何字符序列,?匹配单个字符,@ 987654325@ 匹配集合中的一个字符,而这些是唯一可用的通配符,那么我认为通常不能将正则表达式转换为 glob。什么 glob 会匹配与正则表达式 (this|that)file 相同的序列?
  • @Rob 我没有将其发布为答案,因为它是猜测。我确实知道可以证明环视允许匹配没有它们就无法匹配的模式。我还认为 glob 中没有环视。我相当肯定你要求的东西是不可能的,因为 glob 是正则表达式的严格子集。

标签: java regex extglob


【解决方案1】:

extglob 可以匹配多个正则表达式结构(pattern-list 是更改列表):

extglob           regex
--------------    -----------------


?                 [^/]
*                 [^/]*
.                 \.
**                .
?(pattern-list)   (pattern-list)?
*(pattern-list)   (pattern-list)*
+(pattern-list)   (pattern-list)+
@(pattern-list)   (pattern-list)
!(pattern-list)   (?!pattern-list)

据我所知,有些正则表达式无法在 extglob 中完成:

??????????????    [^abc]
??????????????    \1
??????????????    most look arounds

假设正则表达式中的所有结构都具有 extglob 等效项,则可以将其转换为 extglob 形式。这会很困难,因为正则表达式由 CFG 表示。而你正在使用 Java,这迫使你使用邪恶的逃逸转义 \\

为什么不直接使用支持正则表达式的不同 bash 实用程序?喜欢this

【讨论】:

    猜你喜欢
    • 2017-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-02
    • 2016-04-02
    • 1970-01-01
    相关资源
    最近更新 更多