【问题标题】:Looking for query in xml file using regex in eclipse在 Eclipse 中使用正则表达式在 xml 文件中查找查询
【发布时间】:2019-11-17 20:53:13
【问题描述】:

使用 Regex Eclipse 搜索功能,我需要查找使用 IBATIS e 编写的查询,并存储在 XML 文件中。

我尝试自己构建正则表达式字符串..但没有成功。

在某些文件 XML 中有查询。文件示例:

<sqlMap namespace="Crediti">

 <select id="quotaVarPost50" parameterClass="qdb" resultClass="qdb">
      SELECT QDD_MAX.*
      FROM  ${schema}.QUOTEDATA QDD_MAX,
            ${schema}.ESERCIZIO ESE
      WHERE QDD_MAX.DATA_REGISTRAZIONE &gt;= #DATA_REGISTRAZIONE#
        AND QDD_MAX.TIPO_QUOTA = #TIPO_QUOTA#
        AND QDD_MAX.ANNO_RIF = #ANNO_RIF#
        AND QDD_MAX.SCO_TIPO_VARIAZIONE &lt;&gt; '04'
</select>


 <select id="allegatoCreditoDaRegDeb" parameterClass="RegistroDebitori" resultClass="stringa">
        SELECT PADRE.DESCRIZIONE
        FROM ${schema}.DECODIFICA_RELAZIONI REL
            INNER JOIN ${schema}.DECODIFICA PADRE
            ON (REL.TIPO_CODIFICA_PADRE = PADRE.TIPO_CODIFICA
                AND REL.CODICE_PADRE = PADRE.CODICE)
            INNER JOIN ${schema}.DECODIFICA FIGLIO
            ON (REL.TIPO_CODIFICA_FIGLIO = FIGLIO.TIPO_CODIFICA
                AND REL.CODICE_FIGLIO = FIGLIO.CODICE)
        WHERE REL.TIPO_RELAZIONE = 'T89'
            AND REL.CODICE_RELAZIONE = 'RP88'
            AND SYSDATE BETWEEN REL.DATA_INIZIO_VAL AND REL.DATA_FINE_VAL
            AND REL.TIPO_CODIFICA_FIGLIO = #COD_SOTTOINSIEME_ORIGINE#
            AND REL.CODICE_FIGLIO = #SCO_SOTTOINSIEME_ORIGINE#
    </select>

<delete id="deleteDomanda" parameterClass="hashmap" >
        DELETE ${schema}.VOCI_DOMANDA 
        WHERE TIPO_BILANCIO = #TIPO_BILANCIO#
            AND ANNO_ES = #ANNO_ES#
            AND PROGR_DEBITO = #PROGR_DEBITO#
            AND ID_VOCE_DOMANDA_DEBITO = #ID_VOCE_DOMANDA_DEBITO#
</delete>

</sqlMap>

这是一个例子,真正的文件有越来越多的语句(select,delete,update,...)

我想要一个正则表达式字符串(被 eclipse 功能接受 -> 搜索 - 文件 - 正则表达式),它允许我找到包含一些单词的查询语句。

例如,我正在寻找包含“TDECODIFICA_RELAZIONI”和“TDECODIFICA”这两个词的查询。 Eclipse 应该找到具有 id="allegatoCreditoDaRegDeb" 的语句的匹配项(出现在上面的示例中)

here an image of search toolbar

【问题讨论】:

  • 这个&lt;[^&gt;]*\sid="allegatoCreditoDaRegDeb"[^&gt;]*&gt;([^&lt;]*\b(TDECODIFICA_RELAZIONI|TDECODIFICA)\b){2}?
  • 感谢您的回答,但我不知道女巫是选择的 ID 名称。我只知道我正在寻找一个选择“”,其中包含我在正则表达式字符串中输入的单词。
  • 我明白了。 &lt;select[^&gt;]*&gt;([^&lt;]*\b(TDECODIFICA_RELAZIONI|TDECODIFICA)\b){2},对吧?
  • 我第一次阅读您的评论时也尝试过这个,但没有用
  • 它适用于我给定的例子。确保搜索字段中没有前面或后面的空格。

标签: java regex eclipse


【解决方案1】:

@howlger 回复 &lt;select[^&gt;]*&gt;([^&lt;]*\b(TDECODIFICA_RELAZIONI|TDECODIFICA)\b){2} 这个正则表达式字符串允许我限制很多研究。 当找到至少 2 个结果时,它将匹配一个 select 语句(即使匹配可能是同一单词之一的 2 次)。

谢谢 @howlger

【讨论】:

  • 每个单词只匹配一次使用&lt;select[^&gt;]*&gt;[^&lt;]*\b(TDECODIFICA_RELAZIONI|TDECODIFICA)\b[^&lt;]*\b(?!\1)(TDECODIFICA_RELAZIONI|TDECODIFICA)\b(?!\1)表示与第一个括号中的匹配不同)。
猜你喜欢
  • 1970-01-01
  • 2012-01-30
  • 2012-11-30
  • 1970-01-01
  • 1970-01-01
  • 2011-05-10
  • 1970-01-01
  • 2013-01-31
  • 1970-01-01
相关资源
最近更新 更多