Regex : pour extraire une sous-chaîne entre deux balises dans une chaîne

J'ai un fichier au format suivant :

Données de données Données [Commencer] Données que je veux [Fin] Données

Je voudrais récupérer le Data I want entre les balises [Start] et [End] en utilisant un Regex. Quelqu'un peut-il me montrer comment cela pourrait être fait ?

请先 登录 后评论

4 réponses

Karl Seguin
[start](.*?)[end]

Zhich placera le texte au milieu d'une capture.

请先 登录 后评论
Xenph Yan
[start]s*(((?![start]|[end]).)+)s*[end]

Cela devrait, espérons-le, supprimer également les marqueurs [start] et [end].

请先 登录 后评论
Grant

Avec Perl, vous pouvez entourer les données que vous voulez de () et les extraire plus tard, peut-être que d'autres langages ont une fonctionnalité similaire.

if ($s_output =~ /(data data data data START(data data data)END (data data)/) 
{
    $dataAllOfIt = $1;      # 1 full string
    $dataInMiddle = $2;     # 2 Middle Data
    $dataAtEnd = $3;        # 3 End Data
}
请先 登录 后评论
un33k

Eh bien, si vous garantissez que chaque balise de début est suivie d'une balise de fin, alors ce qui suit fonctionnera.

[start](.*?)[end]

Cependant, si vous avez un texte complexe tel que le suivant :

[start] sometext [start] sometext2 [end] sometext [end]

alors vous rencontrerez des problèmes avec regex.

Maintenant, l'exemple suivant va extraire tous les liens dynamiques d'une page :

'/<a(.*?)a>/i'

Dans le cas ci-dessus, nous pouvons garantir qu'il n'y aura pas de cas imbriqués de :

'<a></a>'

Il s'agit donc d'une question complexe qui ne peut pas être résolue avec une réponse simple.

请先 登录 后评论