Avatar billede killer_bee Nybegynder
06. september 2007 - 08:34 Der er 7 kommentarer og
1 løsning

HTML parsing

Hej alle RegEx eksperter,

Håber i kna hjælpe mig med at lave en regex til at finde ud af om følgende streng(med new lines og speces der måtte være) er i min fil:

          <!--
          <tr>
            <td class="left">&nbsp;</td>
            <td class="input">flip rotate
              <script>
                writeFlipString();</script>
            </td></tr>
          -->

her er jeg KUN interesseret i om der er <!-- og --> omkring linjerne OG kun denne linje er der: <td class="input">flip rotate.

Så pceudo koden er :
er der LINJE <td class="input">flip rotate mellem udkommenteringene  <!-- og -->.

Men skal lige siges at der kan være udkommenteringer før og efter denne block, så man skal sørge for at man finder linjen lige imellem 'dens egen' udkommentering.

puha  .. håber det til at forstå .. ellers spørg bare
Avatar billede nielle Nybegynder
06. september 2007 - 08:47 #1
Et hurtigt bud:

<!--[^-]*<td class="input">flip rotate[^-]*-->
Avatar billede killer_bee Nybegynder
06. september 2007 - 08:57 #2
sorry, virkede ikke .. og kan se at du negerer '-' men der kan måske senere komme et minus et eller andet sted.
Og jeg kører med perl syntax .. ved ikke om det hjalp...

men her er et lille udsnit af html'en:

              <!-- code for default blabla-->
              <!--
                <a href="java script:void(0)" tabindex="-1"
                onClick="return upDowngif(blabla);"
                onMouseOver="window.status='set default blabl; return true;"
                onMouseOut="window.status=''">
                <font size="-2" color="#009999">default</font></a> -->
            <td class="input">brightness
              <input type="text" id="blabl" value="0.50"
                  onChange="blabl(this)">
              </td></tr>
          <!-- no flip rotate for IQeye6  -->
          <!--
          <tr>
            <td class="left">&nbsp;</td>
            <td class="input">flip rotate
              <script>
                writeFlipString();</script>
            </td></tr>
          -->
          <tr>
            <td class="endsubleft">&nbsp;</td>
            </td>
          </tr>
          <tr>
            <td class="subtitleleft">&nbsp;</td>
        <!-- extra blabla on top to align with blabl-->
Avatar billede killer_bee Nybegynder
06. september 2007 - 09:00 #3
har lavet den om til:
<!--[^-]*|\s*<td class="input">flip rotate[^-]*|\s*-->
og den matcher .. menlidt for meget .. den matcher andre udkommenteringer også ..
Avatar billede killer_bee Nybegynder
06. september 2007 - 10:42 #4
flere bud?
Avatar billede nielle Nybegynder
06. september 2007 - 11:10 #5
Den er tricky...

Mit forslag er at gøre det i to trin:

Match alle kommentarere med:

<!--((?!-->).)*?-->

Test derefter det matchede for om de indeholder:

<td class="input">flip rotate
Avatar billede killer_bee Nybegynder
06. september 2007 - 11:42 #6
ok takker ..
har lavet lidt om da . matcher ikke new line hos mig:
(<!--((?!-->).|\s)*?-->)

men den virker ellers  - tak smid lige et svar.
Avatar billede nielle Nybegynder
06. september 2007 - 12:45 #7
Hvorvid den matcher newline eller ej afhænger af hvilke qualifiere du putter på din match - f.eks. skulle det være gjort med '/.../s' i Perl og PHP og RegexOption.SingleLine i .NET.
Avatar billede killer_bee Nybegynder
06. september 2007 - 15:56 #8
bare lige FYI ... har lavet den selv i 1 sætning:
<!--((?!-->).?)*?(class\s*=\s*"input"\s*>\s*flip\s*rotate).*?-->

denne matcher lige det jeg vil have .. i en go ...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester