Java 模式多行

标签 java regex

您好,我想在 HTML 中找到该代码

{%foreach damagePhotos : photo%}
    <img src="{%=photo}" alt="" width="320" height="200"/>
{%endforeach%}

我的正则表达式是:

Matcher matcher = Pattern.compile("\\{\\%foreach\\s(.*)\\s:\\s(.*)\\%\\}\\s(.*)\\s\\{\\%endforeach\\%\\}",Pattern.MULTILINE).matcher(parsedHtml);

一切正常,直到我在 html 中得到了很多这样的模式 :(

例如:

<p>
    {%foreach carPhotos : photo%}
    <img src="{%=photo}" alt="" width="320" height="200"/>
    {%endforeach%}
</p>
<p>
    {%foreach damagePhotos : photo%}
    <img src="{%=photo}" alt="" width="320" height="200"/>
    {%endforeach%}
</p>

然后 mather 找到一个匹配项,group(1) 是:

carPhotos : photo%}    <img src="{%=photo}" alt="" width="320" height="200"/>    {%endforeach%}</p><p>    {%foreach damagePhotos

我的正则表达式有什么问题?

最佳答案

.* 是贪婪的,这意味着它将跨越多个 foreach 组。

尝试添加一个勉强的限定符,即 .*?

另外,请注意 limitations of using regex to parse HTML .

关于Java 模式多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50241917/

相关文章:

java - 如何在无效参数异常后退出 ChromeDriver

regex - ^ 字符无法在 htaccess 中进行 mod 重写

javascript - 如何解析 Objective-C 中 JavaScript 赋值语句中的值

java - Android根据坐标高亮显示Imageview区域

java - 如何对发送到 Activity 的不同 Extras 执行不同的操作?

java - 如何使用单一连接管理 DAO

asp.net - 重定向主页

Javafx 在复选框更改时更新表格 View

javascript - 在 JavaScript 中使用正则表达式验证 JSON 字符串

python - 如何在 python 中编写一个在字符串中第一个句点处停止的正则表达式,该字符串具有不可预测的字符类型?