2011-08-05 29 views
5

Tengo una colección de cuerdas y todo lo que quiero para la expresión regular es recoger todo comenzó con http ..C# de expresiones regulares excluyendo una cadena

href = "http://www.test.com/cat /1-one_piece_episodes/"href="http://www.test.com/cat/2-movies_english_subbed/"href="http://www.test.com/cat/3-english_dubbed/"href="http : //www.exclude.com"

esta es mi patrón de expresión regular ..

href="(.*?)[^#]" 

y enviar el presente

href="http://www.test.com/cat/1-one_piece_episodes/" 
href="http://www.test.com/cat/2-movies_english_subbed/" 
href="http://www.xxxx.com/cat/3-english_dubbed/" 
href="http://www.exclude.com" 

lo que es el patrón para excluir el último partido .. o exclusión de partidos que tiene el excluyen dominio dentro como href = "http://www.exclude.com"

EDIT: de exclusión múltiple

href="((?:(?!"|\bexclude\b|\bxxxx\b).)*)[^#]" 
+0

¿Querías que la URL 'http:// www.test.com/fish/exclude' incluido? ¿qué pasa con 'http: // www.exclude.co.uk' o' http: // www.exclude.test.com' –

Respuesta

11

@ridgerunner y me gustaría cambiar la expresión regular a:

href="((?:(?!\bexclude\b)[^"])*)[^#]" 

que coincide con todos los atributos href, siempre y cuando no terminan en # y no contienen la palabra exclude.

Explicación:

href="  # Match href=" 
(   # Capture... 
(?:  # the following group: 
    (?!  # Look ahead to check that the next part of the string isn't... 
    \b  # the entire word 
    exclude # exclude 
    \b  # (\b are word boundary anchors) 
)  # End of lookahead 
    [^"]  # If successful, match any character except for a quote 
)*  # Repeat as often as possible 
)   # End of capturing group 1 
[^#]"  # Match a non-# character and the closing quote. 

para permitir múltiples "palabras prohibidas":

href="((?:(?!\b(?:exclude|this|too)\b)[^"])*)[^#]" 
+0

analizando "href =" ((? :(?! "| \ bexclude \ b).) * [^ #] "" - No es suficiente) Está bien ahora ... Acabo de leer la explicación .. href = "((? :(?!" | \ bexclude \ b).) *) [^ # ] " –

+0

pregunta adicional señor ... ¿qué tal si excluyo cadena adicional ** xxxx **? –

+0

no es necesario ... lo resolví ... gracias .. –

0

afectará esto el trabajo?

href="(?!http://[^/"]+exclude.com)(.*?)[^#]" 
2

Su entrada no se ve como una cadena válida (a menos que escapar de las cotizaciones en ellos), pero puede hacerlo sin expresión regular también:

string input = "href=\"http://www.test.com/cat/1-one_piece_episodes/\"href=\"http://www.test.com/cat/2-movies_english_subbed/\"href=\"http://www.test.com/cat/3-english_dubbed/\"href=\"http://www.exclude.com\""; 

List<string> matches = new List<string>(); 

foreach(var match in input.split(new string[]{"href"})) { 
    if(!match.Contains("exclude.com")) 
     matches.Add("href" + match); 
} 
Cuestiones relacionadas