用于查找没有嵌套标记的标记的Regexp

用于查找没有嵌套标记的标记的Regexp,regex,Regex,我正在尝试编写一个regexp,它将有助于在html代码中查找未翻译的文本 翻译文本意味着它们要经过特殊标记:或构造:${…} 例:非翻译: <h1>Hello</h1> 你好 译文如下: <h1><fmt:message key="hello" /></h1> <button>${expression}</button> ${expression} 我写了以下表达式: \<(\w+[^>]

我正在尝试编写一个regexp,它将有助于在html代码中查找未翻译的文本

翻译文本意味着它们要经过特殊标记:或构造:${…}

例:非翻译:

<h1>Hello</h1>
你好 译文如下:

<h1><fmt:message key="hello" /></h1>
<button>${expression}</button>

${expression}
我写了以下表达式:

\<(\w+[^>])(?:.*)\>([^\s]+?)\</\1\>
(?:.*)\>([^\s]+?)\ 它会找到正确的字符串,如:

<p>text<p>
文本
正确跳过

<a><fmt:message key="common.delete" /></a>

但也抓住了:

<li><p><fmt:message key="common.delete" /></p></li>
  • 我不知道如何在这个表达式中为${…}字符串添加异常
    有人能帮我吗?

    如果格式像您的示例中那样简单,您可以尝试以下方法:

    <(\w+)>(?:(?!<fmt:message).)+</\1>
    

    (?:(?!我成功地使用了这样一个简单的方法


    ]+)[^>]*>([^如果我理解正确,您希望确保“标记”中的数据不包含
    fmt:message
    ${..}

    您可以将负前瞻与
    组合使用,以断言
    捕获的字符不属于以下情况之一:

    /<(\w+)[^>]*>(?:(?!<fmt:message|\$\{|<\/\1>).)*<\/\1>/i
    

    从注释中添加如果您还想排除“空”标记,请添加另一个负面前瞻-这次
    (?!\s*(?!\s*重写为更正式的问题:

    你能匹配吗

    aba

    但不是

    aca

    不着边际

    abcba

    金融稳定机制:

    Start->A->B->A->Terminate

    插入abcba并运行它

    Start is ready for input. 
    a -> MATCH, transition to A
    b -> MATCH, transition to B
    c -> FAIL, return fail.
    
    也看到

    有关使用正则表达式解析html的讨论


    执行摘要:不要

    Checkout=)。你应该改用html解析器。@notnoop:但那不是html,那是JSTL。虽然..我不知道JSTL,但如果它格式足够好,那么你可以使用XML解析器。我真的很想看到一个包含尖括号的东西的regexp问题,这个问题在哪里[在某些评论中没有链接它比我的效果更好,但仍然捕获hi

    (这里我只需要嵌套的'p'标记)和

    不错,但它不适用于具有属性的标记,如
  • hi
  • 后一种情况是最好的!它不像前一种情况那样贪婪(不匹配某物,但只匹配某物)。我唯一不知道如何排除空白(即不匹配“

    ”)的地方是不是仍然匹配
    某个东西
    ?当它到达
    时,它无法判断它是否在标记内。@kemp-不,它不匹配
    啊,我明白你的意思,我想
    某个东西应该完全失败
    
    /<(\w+)[^>]*>(?!\s*<)(?:(?!\$\{)[^<])*<\/\1>/i
    
    Start is ready for input. 
    a -> MATCH, transition to A
    b -> MATCH, transition to B
    c -> FAIL, return fail.