regex 如何使用正则表达式只保留特定数量的表行[关闭]

v6ylcynt  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(87)

**已关闭。**此问题需要debugging details。目前不接受回答。

编辑问题以包括desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将帮助其他人回答问题。
8天前关闭。
Improve this question
你好,
我有下面这段代码,我想去掉一些东西,所以我用正则表达式来做。这应该只保留div里面的内容,并使用类“show-excerpt”,但我也想只保留前3行,并去掉除此之外的所有内容。

$contents = '<header>some stuff</header><main>
       <div class=“ghug guhjh show-excerpt”>
        <table>
         <tr><td>Some stuff</td><td>More stuff</td></tr><!—-keep this row—->
         <tr><td>Some stuff</td><td>More stuff</td></tr><!—-keep this row—->
         <tr><td>Some stuff</td><td>More stuff</td></tr><!—-keep this row—->
         <tr><td>Trash</td><td>More trash</td></tr><!—-DONT keep this row—->
        </table>
       </div></main>';

     $regex='/\<div class\=\"[^"]*show-excerpt[^"]*?">(.*?)<\/div>/s';

字符串
这应该会产生以下结果:

<div class=“ghug guhjh show-excerpt”>
        <table>
         <tr><td>Some stuff</td><td>More stuff</td></tr><!—-keep this row—->
         <tr><td>Some stuff</td><td>More stuff</td></tr><!—-keep this row—->
         <tr><td>Some stuff</td><td>More stuff</td></tr><!—-keep this row—->
        </table>
       </div>


我怎么能做到这一点,请记住,注解实际上并不存在于代码中,我也不能编辑html。
谢谢

rkttyhzu

rkttyhzu1#

您可以匹配这些部分,然后在回调场景中去掉中间行,然后写回更正。
温度...

(?i)(<div(?=((?:[^>"']|"[^"]*"|'[^']*')*?\sclass\s*=\s*(['"])(?:(?!\3)[\S\s])*?show-excerpt(?:(?!\3)[\S\s])*\3(?:"[\S\s]*?"|'[\S\s]*?'|[^>]*?)+>))\2\s*)([\S\s]*?)(\s*</div>)

字符串
概述

(?i)
(                             # (1 start)
   <div
   (?=
      (                             # (2 start)
         (?: [^>"'] | " [^"]* " | ' [^']* ' )*?
         \s 
                                       # class attribute with 'show-excerpt' in value
         class \s* = \s* 
         ( ['"] )                      # (3), Quote
         (?:
            (?! \3 )
            [\S\s] 
         )*?
         show-excerpt                  # 'show-excerpt'
         (?:
            (?! \3 )
            [\S\s] 
         )*
         \3                            # Close quote
         
         # The remainder of the div tag parts
         (?: " [\S\s]*? " | ' [\S\s]*? ' | [^>]*? )+
         > 
      )                             # (2 end)
   )
   \2 
   \s*    
)                             # (1 end)
( [\S\s]*? )                  # (4)
( \s* </div> )                # (5)

相关问题