【问题标题】:Match "ABC" from *ABC*, but not from **ABC**匹配 *ABC* 中的“ABC”,但不匹配 **ABC** 中的“ABC”
【发布时间】:2011-10-30 01:40:18
【问题描述】:

我正在尝试从 *ABC* 匹配 ABC,但不是从 **ABC** 匹配。

到目前为止,我有这个;

/[^\*]{1}\*([^\*]+)\*[^\*]+/

要匹配的字符串可以是以下任何一个。

ABC **Don't match this** DEF
ABC *Match this* DEF
*Match this*
**Don't match this**

【问题讨论】:

    标签: regex


    【解决方案1】:

    您可以使用negative look-behindnegative look-ahead。那是

    (?<!\*)\*ABC\*(?!\*)
    

    读起来是

    *ABC* 前面没有 *,也没有后面 *

    【讨论】:

    • 或者,如果该风格不支持后视(如 JavaScript),在开头添加它也可能足够:(?!.*\*{2})
    • 或者\s\*ABC\*\s,如果你能保证*Match this*的前后总是有一个空格。
    • @Felix - 如果字符串中有任何**,则前瞻将使正则表达式失败(' *ABC* **' 将失败)。
    • @sin:我知道,这就是为什么我说它可能就足够了;)这显然取决于可能的输入。
    【解决方案2】:

    你在正确的轨道上。
    没有断言:/(?:^|[^*])\*[^*]+*(?:[^*]|$)/
    (使用 aioobe 的正则表达式与断言,或任何有/无的组合)。

    【讨论】:

      【解决方案3】:

      如果字符串以“*”开头和结尾,您可以使用:

      /^*([^*]+)*$/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-06-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多