2009-04-28 6 views
2

J'ai cette expression régulière qui extrait des balises META à partir de documents HTML mais qui me donne des erreurs lorsque je l'incorpore dans mon application web.Problème avec l'expression régulière C# pour extraire les balises META

l'expression est

@"<meta[\\s]+[^>]*?name[\\s]?=[\\s\"\']+(.*?)[\\s\"\']+content[\\s]?=[\\s\"\']+(.*?)[\"\']+.*?>" ; 

est-il quelque chose de mal avec elle?

+0

L'expression rationnelle semble valide. Il serait utile si vous avez posté un exemple de code qui jette l'erreur. –

+0

Ce serait bien si vous énoncez l'erreur que l'expression rationnelle vous donne. Et peut-être un échantillon de code un peu plus grand, avec la ligne sur laquelle l'erreur se produit. – pyrocumulus

+0

La regex analysera également les entrées invalides (par exemple,

Répondre

8

Vous utilisez à la fois la syntaxe @ (verbatim string) et l'échappement de vos barres obliques dans l'échantillon que vous avez publié. Vous devez soit supprimer le @, soit supprimer les barres obliques supplémentaires et échapper vos guillemets doubles en les doublant, alors cela devrait fonctionner.

(Pour ce que ça vaut la peine, si vous allez travailler avec une expression régulière sur une base continue, je vous suggère d'investir dans une copie de RegExBuddy.)

+0

Ils sont appelés "chaînes verbatim". Et l'un des avantages de RegexBuddy est que, après vous avoir aidé à créer la bonne regex, il peut exporter la regex dans le format dont vous avez besoin, y compris les chaînes C# verbatim. –

5

Lorsque vous utilisez une chaîne littérale (@ « ») vous n'avez pas besoin de doubler les barres obliques inverses - tout dans la chaîne est acceptée comme il est - à l'exception des guillemets doubles, qui doivent être doublé:

@"<meta[\s]+[^>]*?name[\s]?=[\s""']+(.*?)[\s""']+content[\s]?=[\s""']+(.*?)[""']+.*?>"

0

Jeromy est juste. Vous utilisez une chaîne échappée et une chaîne littérale. La regex elle-même est bien ... Donc je suppose que c'est là que le problème est.

Questions connexes