搜索
aardio官方社区 门户 查看主题

如何不匹配原始串(局部禁用模式)?

发布者: ejzhang | 发布时间: 2017-3-14 12:47| 查看数: 850| 评论数: 9|帖子模式

本帖最后由 ejzhang 于 2017-3-14 12:50 编辑

模式中有比较复杂的串(需要局部禁用模式),请问如何匹配不包含此串的结果?谢谢!
比如:匹配不包含如下字串的情况
  1. <@//<![CDATA[parent.window.location='Login.aspx'//]]>@>
复制代码

最新评论

ejzhang 发表于 2017-3-14 13:07:11
可以了
  1. <@^//<![CDATA[parent.window.location='Login.aspx'//]]>@>
复制代码

但是如何在局部禁用模式里匹配换行呢?比如
  1. <@name="target" value="xxxxxx"
  2. name="lastfocus" value="256485"
  3. name="viewstate" value="090808"@>
复制代码
mzky 发表于 2017-3-14 13:23:08
ejzhang 发表于 2017-3-14 13:07
可以了

但是如何在局部禁用模式里匹配换行呢?比如

一般文本是\r\n
utf-8是\r
html是</br>
ejzhang 发表于 2017-3-14 13:28:16
第一个问题没解决,现在是两个问题:1、如何不匹配原始串(局部禁用模式),2、原始串(局部禁用模式)中如何匹配换行。谢谢!
rbpy 发表于 2017-3-14 19:12:30
ejzhang 发表于 2017-3-14 13:28
第一个问题没解决,现在是两个问题:1、如何不匹配原始串(局部禁用模式),2、原始串(局部禁用模式)中如 ...

有没有具体要匹配的例子,发出来可以帮你看看怎么写。你这样说太空了
ejzhang 发表于 2017-3-14 23:55:11
rbpy 发表于 2017-3-14 19:12
有没有具体要匹配的例子,发出来可以帮你看看怎么写。你这样说太空了

因为待匹配的模式比较复杂,需要用原始串(局部禁用模式)实现,当然前面还有其他模式(这里就忽略了),我想匹配包含前面模式但不包含下面这个模式的字符串,比如匹配字符串1而不匹配字符串2,请问如何实现?谢谢!
模式串:
  1. <@//<![CDATA[
  2. parent.window.location='Login.aspx'//]]>@>
复制代码

字符串1:
  1. <div class="btnhide" id="addform">

  2.             <div class="row">
  3.                 <span class="input-group-addon">&nbsp;XXXXXXXXXX
  4.                 </span>
  5.                 <input name="txt_word" type="text" id="txt_word" class="easyui-textbox" />
  6.                 <a class="easyui-linkbutton" data-options="iconCls:'icon-search'" onclick="bindList()">XXXXXX</a>
  7.             </div>
  8.             <div class="box-body">
  9.                 <table id="tt"></table>

  10.             </div>
  11.         </div>
  12.     </form>
  13. </body>
  14. </html>
复制代码

字符串2:
  1. <div class="btnhide" id="addform">

  2.             <div class="row">
  3.                 <span class="input-group-addon">&nbsp;XXXXXXXXXX
  4.                 </span>
  5.                 <input name="txt_word" type="text" id="txt_word" class="easyui-textbox" />
  6.                 <a class="easyui-linkbutton" data-options="iconCls:'icon-search'" onclick="bindList()">XXXXXX</a>
  7.             </div>
  8.             <div class="box-body">
  9.                 <table id="tt"></table>

  10.             </div>
  11.         </div>


  12. <script type="text/javascript">
  13. //<![CDATA[
  14. parent.window.location='Login.aspx'//]]>
  15. </script>
  16. </form>
  17. </body>
  18. </html>
复制代码
rbpy 发表于 2017-3-15 00:43:02
ejzhang 发表于 2017-3-14 23:55
因为待匹配的模式比较复杂,需要用原始串(局部禁用模式)实现,当然前面还有其他模式(这里就忽略了), ...

你说得好绕啊,听得好吃力。不一定非要一次匹配出来啊,先匹配个大概,再查找里面是否包含了你不想要的,包含了就放弃。不一定非要用你那个局部禁用。模式匹配我也经常用,感觉挺简单的。你又不贴你实际查找的文本出来,如果贴了,我都帮你写出来了
ejzhang 发表于 2017-3-15 14:52:57
rbpy 发表于 2017-3-15 00:43
你说得好绕啊,听得好吃力。不一定非要一次匹配出来啊,先匹配个大概,再查找里面是否包含了你不想要的, ...

我贴了啊,想匹配的文本和不想匹配的文本都贴出来了。
rbpy 发表于 2017-3-15 16:57:19
ejzhang 发表于 2017-3-15 14:52
我贴了啊,想匹配的文本和不想匹配的文本都贴出来了。
  1. io.open()

  2. str = /*
  3. 字符串1:
  4. <div class="btnhide" id="addform">

  5.             <div class="row">
  6.                 <span class="input-group-addon">&nbsp;XXXXXXXXXX
  7.                 </span>
  8.                 <input name="txt_word" type="text" id="txt_word" class="easyui-textbox" />
  9.                 <a class="easyui-linkbutton" data-options="iconCls:'icon-search'" onclick="bindList()">XXXXXX</a>
  10.             </div>
  11.             <div class="box-body">
  12.                 <table id="tt"></table>

  13.             </div>
  14.         </div>
  15.     </form>
  16. </body>
  17. </html>
  18. 字符串2:
  19. <div class="btnhide" id="addform">

  20.             <div class="row">
  21.                 <span class="input-group-addon">&nbsp;XXXXXXXXXX
  22.                 </span>
  23.                 <input name="txt_word" type="text" id="txt_word" class="easyui-textbox" />
  24.                 <a class="easyui-linkbutton" data-options="iconCls:'icon-search'" onclick="bindList()">XXXXXX</a>
  25.             </div>
  26.             <div class="box-body">
  27.                 <table id="tt"></table>

  28.             </div>
  29.         </div>


  30. <script type="text/javascript">
  31. //<![CDATA[
  32. parent.window.location='Login.aspx'//]]>
  33. </script>
  34. </form>
  35. </body>
  36. </html>
  37. */

  38. for m in string.gmatch(str ,`\<div\s+class\s*=\s*"btnhide".+?<@</html>@>`) {
  39.         io.print("匹配到:", m)
  40.         if(string.indexOf(m, "CDATA")){
  41.                 io.print("但不是我想要的")       
  42.         }else {
  43.                 io.print("就是我想要的")
  44.         }
  45.         io.print('\n-------------------------\n')       
  46. }

  47. execute("pause")
复制代码


反正看你上面写的,很难帮你解决问题,我耐心好点帮你写了一段,但不一定能合你的意。比我耐心差的人肯定更多些
ejzhang 发表于 2017-3-15 18:00:26
本帖最后由 ejzhang 于 2017-3-15 18:02 编辑
rbpy 发表于 2017-3-15 16:57
反正看你上面写的,很难帮你解决问题,我耐心好点帮你写了一段,但不一定能合你的意。比我耐心差的人 ...


谢谢!
我现在是这样写的,但是我想有没有一次匹配的方法?
  1. import console;

  2. var str1 = /*
  3. <div class="btnhide" id="addform">

  4.             <div class="row">
  5.                 <span class="input-group-addon">&nbsp;XXXXXXXXXX
  6.                 </span>
  7.                 <input name="txt_word" type="text" id="txt_word" class="easyui-textbox" />
  8.                 <a class="easyui-linkbutton" data-options="iconCls:'icon-search'" onclick="bindList()">XXXXXX</a>
  9.             </div>
  10.             <div class="box-body">
  11.                 <table id="tt"></table>

  12.             </div>
  13.         </div>
  14.     </form>
  15. </body>
  16. </html>
  17. */

  18. var str2 = /*
  19. <div class="btnhide" id="addform">

  20.             <div class="row">
  21.                 <span class="input-group-addon">&nbsp;XXXXXXXXXX
  22.                 </span>
  23.                 <input name="txt_word" type="text" id="txt_word" class="easyui-textbox" />
  24.                 <a class="easyui-linkbutton" data-options="iconCls:'icon-search'" onclick="bindList()">XXXXXX</a>
  25.             </div>
  26.             <div class="box-body">
  27.                 <table id="tt"></table>

  28.             </div>
  29.         </div>


  30. <script type="text/javascript">
  31. //<![CDATA[
  32. parent.window.location='Login.aspx'//]]>
  33. </script>
  34. </form>
  35. </body>
  36. </html>
  37. */

  38. console.log( string.match( str1, `<@<div class="btnhide" id="addform">@>` ) && !string.match( str1, `<@//<![CDATA[@>.*?<@parent.window.location='Login.aspx'//]]>@>` ) );

  39. console.log( string.match( str2, `<@<div class="btnhide" id="addform">@>` ) && !string.match( str2, `<@//<![CDATA[@>.*?<@parent.window.location='Login.aspx'//]]>@>` ) );

  40. console.pause();
复制代码

手机版|未经许可严禁引用或转载本站文章|站长邮箱|aardio.com|aardio官方社区 ( 皖ICP备09012014号 )

GMT+8, 2017-11-25 13:22 , Processed in 0.078125 second(s), 18 queries , WinCache On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表