RegExp

  • Huhu, brauche mal eure Hilfe, zu den RegExp...
    Hier mal die Vorgabe...http://hmmm.pastebin.com/7351hK9w
    Wie ihr seht, ist mir klar, wie der Link aussieht... Nur, schaffe ich es i-wie nicht, nur das zu bekommen...

    Greetz

    Einmal editiert, zuletzt von Fr34k (17. November 2010 um 22:36)

  • autoBert, sry, wusste ich nicht... wird nicht wieder vorkommen...
    @m-obi, dies ist bereits ein Ergebnis von _StringBetween, und nun habe ich dies, nach was soll ich denn hier mit StringBetween machn?!

    Es kann sein, dass folgendes vorhanden ist:

    Code
    <a href="security.php?url=aHR0cDovL3d3dy5yZWxpbmsudXMvZi8yMmFkZjI3NDEwM2JhYzkyMTVhMWM4ZDAzM2RkZmM=" target="_blank" title="http://www.relink.us/f/22adf274103bac9215a1c8d033ddfc"><span style="color: indigo;"><b>Download File</b></span></a>

    Es kann jedoch auch sein, dass nur dies vorhanden ist:

    Code
    http://ul.to/3cp5gz

    Wie will ich denn hier StringBetween anwenden?!

    Lg

  • Dann wäre es eher interessant wie der String aussieht bevor du ihn mit StringBetween so zerstückelst das dieses variable Ergebnis rauskommt.
    Ansonsten als RegExp-Ansatz:

    [autoit]

    #include <Array.au3>

    [/autoit][autoit][/autoit][autoit]

    $aRegExp = StringRegExp($sString, "(http://(?:www\.)?(?:relink|ul|depositfiles|rapidshare|uploaded|netload|x7)\.(?:to|com|de|in|us)/[\w\./]*)", 3)
    _ArrayDisplay($aRegExp)

    [/autoit]
  • Hier ein Beispiel, wie es zuerst aussieht

    Code
    <span class="smallfont"><b>Hidden-Text</b></span></td></tr><tr class="normalfont"><td class="inposttable" align="left"> <a href="http://a.imageshack.us/img816/3985/relu.png" target="_blank" title="Originalbild zeigen"><img style="width: 550px; height: 144.697px;" src="http://a.imageshack.us/img816/3985/relu.png" alt="" class="resizeImage" border="0"></a> </td></tr></tbody></table>

    Dieser wird dann zu

    Code
    <a href="http://a.imageshack.us/img816/3985/relu.png" target="_blank" title="Originalbild zeigen"><img style="width: 550px; height: 144.697px;" src="http://a.imageshack.us/img816/3985/relu.png" alt="" class="resizeImage" border="0"></a>


    Gecuttet...

    Danke für deinen Ansatz, nur eine Frage..
    Das mit den Hostern (Du hast immer relink|ul etc. gemacht...)...
    Es sollte so auch möglich sein oder...:
    Ich erstelle einen Array, mit allen Hostern drin, diesen werde ich dann mit _ArrayToString mit dem Zeichen | splitten...
    Anschliessend werde ich statt dort alles reinzuschreiben einfach den String nehmen...

    Richtig?

    Lg


  • Es kann sein, dass folgendes vorhanden ist:

    Code
    <a href="security.php?url=aHR0cDovL3d3dy5yZWxpbmsudXMvZi8yMmFkZjI3NDEwM2JhYzkyMTVhMWM4ZDAzM2RkZmM=" target="_blank" title="http://www.relink.us/f/22adf274103bac9215a1c8d033ddfc"><span style="color: indigo;"><b>Download File</b></span></a>

    Es kann jedoch auch sein, dass nur dies vorhanden ist:

    Code
    http://ul.to/3cp5gz
  • Wie ich so etwas bekomme?

    Code
    <span class="smallfont"><b>Hidden-Text</b></span></td></tr><tr class="normalfont"><td class="inposttable" align="left"> http://ul.to/3cp5gz </td></tr></tbody></table>

    Wenns so aussieht :=)

  • So, ich habe es nun so mehr oder weniger...
    Nur ein problem besteht noch...

    Wie kann ich es verhindern, dass ich folgendes erwische

    Code
    <a title="http://www.relink.us/view.php?id=a0854d8a0a63a96d760a1f5f7c552e" target="_blank" href="security.php?url=aHR0cDovL3d3dy5yZWxpbmsudXMvdmlldy5waHA/aWQ9YTA4NTRkOGEwYTYzYTk2ZDc2MGExZjVmN2M1NTJl">http://www.relink.us/view.php?id=a0854d8...d760a1f5f7c552e</a>

    So, das Problem, welches ich hier habe, ist folgendes...
    Das Ergebnis lautet hier

    Code
    http://www.relink.us/view.php?id=a0854d8a0a63a96d760a1f5f7c552e
    http://www.relink.us/view.php?id=a0854d8...d760a1f5f7c552e


    Da es ja beides findet... Das 2. Ergebnis ist jedoch eigentlich das genau gleiche wie das 1...

    So, wie kann ich dies verhindern?

    Liebe Grüsse
    Fr34k

  • [autoit]

    #include <array.au3>
    $string = '<a title="http://www.relink.us/view.php?id=a0854d8a0a63a96d760a1f5f7c552e" target="_blank" href="security.php?url=aHR0cDovL3d3dy5yZWxpbmsudXMvdmlldy5waHA/aWQ9YTA4NTRkOGEwYTYzYTk2ZDc2MGExZjVmN2M1NTJl">http://www.relink.us/view.php?id=a0854d8...d760a1f5f7c552e</a>'

    [/autoit][autoit][/autoit][autoit]

    $aResult = StringRegExp($string, '<a title="(.+)" target=', 1, 1)
    _ArrayDisplay($aResult)

    [/autoit][autoit][/autoit][autoit]

    #cs ### Output ###
    [0] http://www.relink.us/view.php?id=a0…d760a1f5f7c552e
    #ce

    [/autoit]
  • Jep, aber dies ist ja nicht das Problem...
    Schau, ich will immer den Link haben, es kann relink, uploaded, was auch immer sein, einfach den Link... Jedoch kann es immer anders aussehen, zbs so...

    Code
    <a href="security.php?url=aHR0cDovL3d3dy5yZWxpbmsudXMvZi8yMmFkZjI3NDEwM2JhYzkyMTVhMWM4ZDAzM2RkZmM=" target="_blank" title="http://www.relink.us/f/22adf274103bac9215a1c8d033ddfc"><span style="color: indigo;"><b>Download File</b></span></a>
    Code
    http://ul.to/3cp5gz
    Code
    http://depositfiles.com/files/360007
    Code
    http://rapidshare.com/files/422529516/TUU2011DE_Beta6_0003.exe
    Code
    <a title="http://www.relink.us/view.php?id=a0854d8a0a63a96d760a1f5f7c552e" target="_blank" href="security.php?url=aHR0cDovL3d3dy5yZWxpbmsudXMvdmlldy5waHA/aWQ9YTA4NTRkOGEwYTYzYTk2ZDc2MGExZjVmN2M1NTJl">http://www.relink.us/view.php?id=a0854d8...d760a1f5f7c552e</a>

    Dieser Ansatz hier war ned schlecht...

    $aRegExp = StringRegExp($sString, "(http://(?:www\.)?(?:relink|ul|depositfiles|rapidshare|uploaded|netload|x7)\.(?:to|com|de|in|us)/[\w\./]*)", 3)
    _ArrayDisplay($aRegExp)

    Nur findet es da wie gesagt, das relink teilweise 2 mal, was auch logisch ist... ich müsste i-wie unterbinden können, dass der Punkt mehrmals hintereinander kommt... Er kann beliebig oft kommen, einfach nicht hintereinander!

    Lg

  • Also ich kann mir kaum vorstellen, das alle 5 Quelltext-Ausschnitte die du jetzt gepostet hast auch genau so in ein und dem selben Quelltext vorkommen.Da fehlen ja teilweise HTML tags.

    Wie wäre es denn, wenn du mal 1-2 zusammenhängenden, real vorkommende Quelltexte postest. Aus diesen Fetzen wird doch kein Mensch schlau.

  • Öhm, doch, dies ist so...
    Dies sind alles Beiträge von Usern, die einen Posten einen Downloadlink mit HTML Tags zbs. so:

    Spoiler anzeigen


    Andere Posten es so

    Spoiler anzeigen

    Und so weiter...

    Liebe Grüsse
    Fr34k

  • Also die einfachste Möglichkeit wäre, die Funktion _ArrayUnique() zu verwenden.

    [autoit]

    #include <Array.au3>

    [/autoit][autoit][/autoit][autoit]

    $sString = '<a title="http://www.relink.us/view.php?id=a0854d8a0a63a96d760a1f5f7c552e" target="_blank" href="security.php?url=aHR0cDovL3d3dy5yZWxpbmsudXMvdmlldy5waHA/aWQ9YTA4NTRkOGEwYTYzYTk2ZDc2MGExZjVmN2M1NTJl">http://www.relink.us/view.php?id=a0…d760a1f5f7c552e</a>'

    [/autoit][autoit][/autoit][autoit]

    $aRegExp = StringRegExp($sString, "(http://(?:www\.)?(?:relink|ul|depositfiles|rapidshare|uploaded|netload|x7)\.(?:to|com|de|in|us)/[\w\./]*)", 3)

    [/autoit][autoit][/autoit][autoit]

    $aRegExpUnique = _ArrayUnique($aRegExp)
    _ArrayDelete($aRegExpUnique, 0)

    [/autoit][autoit][/autoit][autoit]

    _ArrayDisplay($aRegExpUnique)

    [/autoit]
  • Die einfachste, welche nicht funktioniert^^

    Code
    http://www.relink.us/view.php?id=a0854d8a0a63a96d760a1f5f7c552e
    http://www.relink.us/view.php?id=a0854d8...d760a1f5f7c552e


    Das ist 1 Link, es findet beide Links, sollte aber nur den oberen finden, also nicht die abkürzung.
    Daher funktioniert _ArrayUnique leider nicht.

    Die einzige Möglichkeit denke ich, ist, dass man per RegEx überprüft, dass nicht 2 Punkte aufeinander folgen.
    Nur, wie geht das?

  • Die einfachste, welche nicht funktioniert^^


    Funktioniert schon, nur nicht so wie du dir das vorgestellt hast ;)

    Code
    http://www.relink.us/view.php?id=a0854d8a0a63a96d760a1f5f7c552e
    http://www.relink.us/view.php?id=a0854d8...d760a1f5f7c552e


    Für dich sind vielleicht beide Links/Strings gleich, aber für AutoIt (und jede andere Programmier-/Skriptsprache) sind das 2 unterschiedliche Links/Strings :whistling:

    Wie auch immer:
    Hiermit werden alle Arrayeinträge gelöscht, die "..." enthalten!

    [autoit]

    #include <Array.au3>

    [/autoit][autoit][/autoit][autoit]

    Dim $aRegExp[1] = ['http://www.relink.us/view.php?id=a0854d8a0a63a96d760a1f5f7c552e']
    _ArrayAdd($aRegExp, 'http://www.relink.us/view.php?id=a0854d8a0a...96d760a1f5f7c552e')
    _ArrayAdd($aRegExp, 'http://www.relink.us/view.php?id=a088a0a...96d760a1f5f7c552e')
    _ArrayAdd($aRegExp, 'http://www.relink.us/view.php?id=a0854d8a096d760a1f5f7c552e')

    [/autoit][autoit][/autoit][autoit]

    For $i=UBound($aRegExp)-1 To 0 Step -1
    If StringInStr($aRegExp[$i], "...") Then _ArrayDelete($aRegExp, $i)
    Next
    _ArrayDisplay($aRegExp)

    [/autoit]
  • Zitat

    Für dich sind vielleicht beide Links/Strings gleich, aber für AutoIt (und jede andere Programmier-/Skriptsprache) sind das 2 unterschiedliche Links/Strings


    Warum sollten das für mich gleiche Strings sein?!

    Thx für das, nur eine Frage, gibt es einen Grund, warum du das ganze rückwärts machst?

    Lg

  • gibt es einen Grund, warum du das ganze rückwärts machst?


    Einen ganz wichtigen sogar :D
    Würde man das vorwärts laufen lassen, dann würdest du immer, wenn du etwas in dem Array löschst, dass Array verkürzen. Die For Schleife allerdings merkt davon nix. Irgendwann würdest du also auf einen Array Index zugreifen, der dann nicht mehr existiert. ;)

    Und noch ein Grund:
    Beim ersten For Durchlauf mit $i = 0 würde beim löschen dieses Array-Werts Array[0], alle anderen Array Indexe um 1 erniedrigt werden:
    Array[1] zu Array[0] werden,
    Array[2] zu Array[1] werden,
    Array[3] zu Array[2] werden, usw.

    Beim nächsten For Durchlauf mit $i = 1 würde dann ein Array Eintrag übersprungen werden:
    Ehemals Array[1] der ja durch das löschen zu Array[0] geworden ist ;)