【问题标题】:Regex for find accent letters that aren't inside html/jsp comments用于查找不在 html/jsp 注释中的重音字母的正则表达式
【发布时间】:2017-12-06 15:32:23
【问题描述】:

您好,我需要在 jsp 文件中找到所有不在 cmets 中的重音词。 举个例子。

<%--This jsp comment have accents áóéí--%>
<html>
<!--This html comment have accents áóéí-->


<h1>This text have accents áóí</h1>
<html>

我需要在 h1 标记内找到重音字母,但在 cmets 内没有。

到目前为止,我有正则表达式来查找 cmets,但我不知道如何否定该部分。 这是我的正则表达式:

\<[!%][ \r\n\t]*(--([^\-]|[\r\n]|-[^\-])*--[ \r\n\t]*)\%*>

我试试

[ó](?!(\<[!%][ \r\n\t]*(--([^\-]|[\r\n]|-[^\-])*--[ \r\n\t]*)\%*>))

但它不起作用。

我怎么能否定这种表达?

【问题讨论】:

  • 我不明白您的全部问题,但如果您需要在 HTML 中搜索某些内容,您可能必须使用解析器来涵盖每个用例。
  • 找到它们后需要怎么处理?删除它们?还是别的什么?
  • 虽然 Anti-Cthulhu 正则表达式的咆哮很幽默,但指向它的 not a good answer 和 some think 链接以无益的方式使用。

标签: java regex jsp regex-negation


【解决方案1】:

用正则表达式匹配每个 HTML 标记的内部文本是不可行的。

我建议改用 Java HTML 解析器。 jsoup 不错。有关更多示例,请参阅jsoup cookbook。

String html = "<p>An <a href='http://example.com/'><b>example</b></a> link.</p>";
Document doc = Jsoup.parse(html);
Element link = doc.select("a").first();

String text = doc.body().text(); // "An example link"
String linkHref = link.attr("href"); // "http://example.com/"
String linkText = link.text(); // "example""

【讨论】:

    【解决方案2】:

    如果您需要简单地删除它们,请使用 Notepad++ 正则表达式查找和替换(选中“.matches newline”框):

    找到什么:

    (--%?>(?:(?!<%--|<!--).)*?)[^-!~@#$%^&*()+=.,<>|?/{}\[\]\\""';:\w\s]+
    

    替换为:

    $1
    

    重复查找和替换,直到找不到更多匹配项。

    否则,您可以使用该正则表达式来查找它们并单独处理它们。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-27
      • 1970-01-01
      • 1970-01-01
      • 2013-10-19
      • 1970-01-01
      • 2018-07-08
      • 1970-01-01
      相关资源
      最近更新 更多