【问题标题】:Regex pattern to match the java part in JSP code正则表达式模式匹配 JSP 代码中的 java 部分
【发布时间】:2022-01-15 03:01:56
【问题描述】:

我正在尝试匹配 JSP 代码中 之间的内容。 假设示例 JSP 代码是:

<%@ page import="java.io.*,java.util.*" %>
<html>
    <head>
        <title>Auto Refresh</title>
    </head>
    <body>
                <fieldset style="width:20%; background-color:#e6ffe6;">
                    <legend>Auto refresh</legend>
                    <h2>Auto Refresh Example</h2>
                    <%
                       // Set refresh, autoload time as 1 seconds
                       response.setIntHeader("Refresh", 1);
                       // Get current time
                       Calendar calendar = new GregorianCalendar();
                       String am_pm;
                       int hour = calendar.get(Calendar.HOUR);
                       int minute = calendar.get(Calendar.MINUTE);
                       int second = calendar.get(Calendar.SECOND);
                       if(calendar.get(Calendar.AM_PM) == 0)
                          am_pm = "AM";
                       else
                          am_pm = "PM";
                       String CT = hour+":"+ minute +":"+ second +" "+ am_pm;
                       out.println("Crrent Time: " + CT + "\n");
                    %>
                </fieldset>
    </body>
</html>

我的正则表达式是/\&lt;\%[\w \@\=\.\*\,\"\$\#\!\&amp;\(\)\/\/\n\+\;\:]*\%\&gt;/gi 它只匹配第一部分,即

<%@ page import="java.io.*,java.util.*" %>

不是第二部分

                    <%
                       // Set refresh, autoload time as 1 seconds
                       response.setIntHeader("Refresh", 1);
                      ........
                       String CT = hour+":"+ minute +":"+ second +" "+ am_pm;
                       out.println("Crrent Time: " + CT + "\n");
                    %>

【问题讨论】:

  • 使用&lt;%[\s\S]*?%&gt;之类的东西怎么样
  • 它与 ............

    Auto Refresh Example

    部分也匹配
  • 你试过the demo吗?我不认为它匹配。

标签: javascript regex


【解决方案1】:

如果您放弃%&gt; 进行试用,您可以see how far it matches。直到 \n" 的反斜杠,因为它不包含在您指定的字符集中。添加反斜杠或使用更通用的东西,例如

/<%[\s\S]*?%>/g

这将延迟匹配&lt;%%&gt; 之间的任意数量的any character

See this demo at regex101

【讨论】:

  • 有什么方法可以在正则表达式中不进行操作,即假设我想匹配除此正则表达式匹配的文本之外的所有文本。
  • @souv202112 您可以尝试something like this,它将其他内容捕获到第 1 组。
【解决方案2】:

试试这个正则表达式。它简短而简单。

/<%.*?%>/gs

Demo

说明

.*? 匹配从零到无限次的任何字符,尽可能少(惰性)。

因此,它需要 &lt;% 和最接近的 %&gt; 之间的所有内容。注意单行修饰符/s

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-24
    • 2016-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-06
    • 2023-03-26
    • 2011-06-13
    相关资源
    最近更新 更多