2016-12-14 4 views
1

J'ai vu beaucoup de réponses, mais aucune ne semble m'aider avec ma situation. Je dois extraire les commentaires de ce texte:Comment utiliser | opérateur dans preg_match pour rechercher entre les chaînes?

Comments: These are the comments and they end at this full stop. Remember, you can only use the personal information...

OU ce texte:

Comments: These are the comments and they end at this full stop. You can only use the personal information...

Un exemple de travail est ici: https://regex101.com/r/apIT0O/1

Mais je ne peux pas sembler obtenir ceci en PHP. Je peux obtenir un pour travailler avec:

$pattern = "/(?<=Comments:)(.*?)(?= Remember, you can)/s"; 

Mais quel est le problème avec cela?

$pattern = "/(?<=Comments:)(.*?)(?= Remember, you can)|(?<=Comments:)(.*?)(?= You can)/s"; 

Merci beaucoup!

+0

En fait, ils [correspondent] (https://eval.in/697037) au contexte que vous souhaitez capturer. Mais je recommanderais une approche différente avec votre expression. – hwnd

Répondre

0

Avec preg_match_all, vous pouvez obtenir tous les résultats avec votre regex.

Essayez ceci:

/(?<=Comments:)(.*?)(?= Remember, you can)|(?<=Comments:)(.*?)(?= You can)/s 

Explanation

Exemple de code:

<?php 

$re = '/(?<=Comments:)(.*?).(?= Remember, you can)|(?<=Comments:)(.*?)(?= You can)/sm'; 
$str = 'Comments: These are the comments and they end at this full stop. Remember, you can only use the personal information... 

Comments: These are the comments and they end at this full stop. You can only use the personal information...'; 
preg_match_all($re, $str, $matches); 
print_r($matches); 
?> 

Runt it here

+1

Merci - J'avais besoin preg_match_all – Warren

+1

En fait, une réflexion après coup - pourquoi ce modèle ne fonctionne qu'avec preg_match_all ??? – Warren

+0

@Warren Vous pouvez voir ma réponse aussi, avec ce modèle regex, ça marche. – Kumar

0

Vous pouvez obtenir votre valeur souhaitée aussi par preg_match comme celui-ci. Voici le code

<?php 
$data="Comments: These are the comments and they end at this full stop. Remember, you can only use the personal information..."; 
preg_match("/(.*)(?<=Comments:)(.*?)(?= Remember, you can)(.*)/",$data,$m); 
echo $m[2]; 
?> 

Sortie:

Ce sont les commentaires et ils se terminent à ce point.

Ou vous pouvez l'utiliser imprimera toute la valeur que vous capturez avec regex

print_r ($ m). J'espère que cela vous aide.