Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    152

    [Regular Expression] Cercare Tag IMG che non hanno alt

    Come da titolo ... mi serve una reg ex che mi tiri fuori tutti i tag image in una stringa contente del codice html il mio lavoro si è fermato a questo punto:

    Sono in grado di trovare tutti quelli per cui c'è il tag alt ... ma come faccio a negare questa condizione ? :

    codice:
      	Dim RE_Obj
    	Set RE_Obj = CreateObject("VBScript.RegExp")
    	RE_Obj.Global		= True
    	RE_Obj.Multiline	= True
    	RE_Obj.IgnoreCase	= True   
    	
                 ' qui metto lo slash finale nei tags e funziona anche se me lo fa pure per quelli che già lo hanno .... ma non importa ....
    	RE_Obj.Pattern = "<(img|meta|link|br|hr)([^>]*)>"
    	strHtml = RE_Obj.Replace(strHtml, "<$1$2/>")
    '  VOGLIO NEGARE QUESTA CONDIZIONE: (alt=([^>]*)) COME FACCIO ???
    	RE_Obj.Pattern		= "<img(?:[^alt=>]*)[^alt=](?:[^>alt=]*)/>"
    	strHtml = RE_Obj.Replace(strHtml, "<img alt=""alt"" $1 />")
    	Set RE_Obj = Nothing

    Spero di essermi capito ....

    Sapete farlo ?

    Ciao e grazie


  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    152
    Ciao a tutti.

    forse sono stato poco chiaro ... provo con un secondo esempio:

    Voglio trovare tutte le librerie inserite da Dreamweaver in una pagina qualsiasi html racchiuse tra tag



    ed



    ho scritto questo codice che funziona se c'è una sola libreria:

    codice:
    	Set FSO = CreateObject("Scripting.FileSystemObject")
    	Set WdgFld = FSO.GetFolder(Folder)
    	For Each File In WdgFld.Files
    		Libraries = Libraries & Replace(File.Name, ".", "_") & "|"
    	Next
    	Libraries = Libraries & "uouoootestoacasouoougououououououoouok"
    
    	Dim IW_REObj
    	Set IW_REObj = CreateObject("VBScript.RegExp")
    	IW_REObj.Global		= True
    	IW_REObj.Multiline	= True
    	IW_REObj.IgnoreCase	= True   
    	IW_REObj.Pattern	= "(.*)"
    	
    
    		Set Matches = IW_REObj.Execute(IW_strTmp)
    		Dim Match, IW_Type, IW_StrValues
    		For Match = 0 To Matches.Count - 1
    			ValueToInsert =	"{" & Matches(Match).SubMatches(0) & "}"
    			IW_strTmp	  = IW_REObj.Replace(IW_strTmp, ValueToInsert)
    		Next
    Ora ho il problema del pattern è che ci potrebbero essere due librerie nella pagina e dunque due tags di chiusura ""

    Ora, dato per assodato che il carattere '^' nega all'interno di parentesi quadre, come faccio a dire alla parte centrale del pattern (.*) una cosa simile a questa :

    ([^()]+)

    dove il testo del tag sia letto nella sua completezza e non come singolo carattere da non considerare ?

    C'è sicuramente un metodo semplice come l'acqua ... ma io sono disidratato !!!!! Vi prego !!!



  3. #3
    oddio io sono negato coi pattern

    codice:
    pattern="((.*))*"
    perchè ( )* dovrebbe identificare piu volte il contenuto tra le parentesi tonde. Visto che tu pensi di avere molte librerie inserite, dovrebbe (?????????????????????) andare (eeeeeeeeh)

    immagino cambierà il foreach sui matches
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  4. #4
    no, anzi, chiaro, sei stato chiaro
    In teoria, quanto hai scritto dovrebbe funzionare, ma non funziona...perchè? BOOHH

    In questi casi io andrei a botte di InStr e Mid, sarò rozzo, ma così tagli la testa al toro.

    Ciau!
    - Dean

  5. #5
    Ops, esiste il ? per limitare la ricerca all'occorrenza minore trovata:
    codice:
    pattern="(.*? )*"
    Ciau!
    - Dean

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    152

    negative lookahead

    Grazie ragazzi per l'apprezzabile tentativo ma le strade proposte non hanno funzionato.

    Ho trovato in teoria un metodo comodo per fare la cosa ma non sono riuscito ad applicarlo in maniera funzionante:

    Le parole chiave sono negative lookahead (o positive o lockforward).

    Documentazione Helicon

    Altra documentazione


    il pattern creato seguendo queste specifiche diventa questo ...

    (?<=)(.*)(?=)

    Mettiamo che il testo HTML sia il seguente

    asdfasdfsfdfsdsdsdxvbfgfsdfgdrfgfdfdasdfasdfa
    secondo me dovrebbe funzionare .... invece mi matcha in questo modo

    codice:
    $0:	sfdfsdsdsdxvbfgfsdfgdrfg
    $1:	box1.lbi
    $2:	sfdfsdsdsdxvbfgfsdfgdrfg

    Qualcuno di voi ha per caso maggior dimestichezza con questa roba ???

    Grazie a tutti

    Cia'

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    152
    C'è sicuramente un metodo semplice come l'acqua ... ma io sono disidratato !!!!! Vi prego !!!
    Atari in effetti avevi l'acqua !!!!!

    Ops, esiste il ? per limitare la ricerca all'occorrenza minore trovata
    ed io non la avevo proprio vista ....

    in effetti andava applicato in maniera più consona

    (?<=)(.*?)(?=)


    la parte fondamentale era questa ... il ? andava lì ... ed io lo stavo mettendo proprio dappertutto ... tralascio i particolari
    (.*?)

    Paragrafo letto dodicimila volte con la soluzione ... che non avevo capito

    Ringrazio tutti quelli che hanno seguito la telenovela fino all'epilogo saluto la mamma, grazie Santino ma soprattutto caffè pagato per Atari ...



Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.