web-dev-qa-db-fra.com

Expression régulière pour faire correspondre tous les caractères entre la balise <h1>

J'utilise l'éditeur sublime text 2. Je voudrais utiliser l'expression régulière pour faire correspondre tous les caractères entre tous les h1 Mots clés.

À partir de maintenant j'utilise comme ça

<h1>.+</h1>

Cela fonctionne bien si la balise h1 n'a pas de pause.

Je veux dire pour

<h1>Hello this is a hedaer</h1>

son fonctionne bien.

Mais cela ne fonctionne pas si la balise ressemble à ceci

<h1>
   Hello this is a hedaer
</h1>

Quelqu'un peut-il m'aider avec la syntaxe?

19
Giri

Par défaut . correspond à tous les caractères sauf le nouveau caractère de ligne.

Dans ce cas, vous aurez besoin de l'option DOTALL, ce qui fera . correspond à n'importe quel caractère, y compris le nouveau caractère de ligne. L'option DOTALL peut être spécifiée en ligne comme (?s). Par exemple:

(?s)<h1>.+</h1>

Cependant, vous verrez que cela ne fonctionnera pas, car le comportement par défaut du quantificateur est gourmand (dans ce cas, son +), ce qui signifie qu'il essaiera de consommer autant de caractères que possible. Vous devrez le faire paresseux (consommer le moins de caractères possible) en ajoutant ? après le quantificateur +?:

(?s)<h1>.+?</h1>

Alternativement, l'expression régulière peut être <h1>[^<>]*</h1>. Dans ce cas, vous n'avez pas besoin de spécifier d'option.

44
Anirudha

Étant donné que cette question est la meilleure recherche de résultats Google pour une expression régulière essayant de trouver tous les caractères entre une balise h1, je pensais que je donnerais également cette réponse. Puisque c'était ce que je cherchais.

(?s)(?<=<h1>)(.+?)(?=</h1>)

Cette expression régulière, si elle est utilisée sur un exemple de texte comme <h1>A title</h1> <p>Some content</p> <h1>Another title</h1> ne renverra que A title.

25
aychedee