正则表达式 - 如何找到<%@%>在文件中的行?

时间:2010-09-05 09:27:36

标签: regex actionscript-3

我发现此突出显示编辑器中存在错误:http://cshe.ds4a.com/

以下ASP.Net代码无法正确突出显示

<%@ Page Title="<%$ Resources: XXX %>" Language="C#" ContentType="text/html" ResponseEncoding="utf-8" %>

问题在于正则表达式,如何通过正则表达式找到整行?

我正在使用ActionScript3中的RegExp

主要挑战是:

  1. &lt;%@%&gt; 指令可能在其属性中包含另一个&lt;%$%&gt; 指令,就像上面的< / p>

  2. &lt;%@%&gt; 指令可能包含换行符,如下所示。

  3. <%@ Page Title="<%$ Resources: XXX %>"
    Language="C#" ContentType="text/html" ResponseEncoding="utf-8"
     %>
    

    3 。 &lt;%@%&gt;指令可能后跟另一个&lt;%@%&gt; ,没有任何空格/换行符

    <%@ Page Title="<%$ Resources: XXX %>"
    Language="C#" ContentType="text/html" ResponseEncoding="utf-8"
     %><%@ Import Namespace="System" %>
    

    谢谢

3 个答案:

答案 0 :(得分:2)

我不确定所有这些逃脱是否必要,但我保留了它们以获得良好的安慰。这发现你在记事本++中的行找到了

^<\%\@.*\%>$

修改

对于多行,请设置multiline和dotall标志。那些表达应该跨越几行,并且那个。通配符应与换行符匹配(\ n)。

/<\%\@.*\%>/sm

<\%\@.*\%>

使用s和m标志。

答案 1 :(得分:1)

试试这个:

/<%@[^%"']++(?:(?:%(?!>)|"[^"]*+"|'[^']*+')[^%"']++)*+%>/

用双引号或单引号括起来的任何内容都被视为通用字符串内容,因此属性值中的%>不会过早关闭标记以进行匹配。

答案 2 :(得分:0)

根据标题,我创建了一个小的RegEx,它还在文件的开头或结尾处理whitepasce。但是我无法保证这是否适合您的项目。

^\s*<%@.*>\s*$

我使用PHP函数preg_match_all()

测试了这个

更新

将此模式用于多行。您的RegExLibrary必须支持参数“s”(它接受换行符作为字符)

/\s*<%@.*>\s*/s