2009-07-12 17 views
1

J'ai une variable contenant une chaîne. La chaîne peut venir de plusieurs façons:PHP: Expression régulière pour supprimer le texte d'une chaîne si la condition est vraie

// some examples of possible string 
$var = 'Tom Greenleaf (as John Dunn Hill)' 
// or 
$var = '(screenplay) (as The Wibberleys) &' 
// or 
$var = '(novella "Four Past Midnight: Secret Window, Secret Garden")' 

Je dois nettoyer la chaîne pour obtenir seulement le premier élément. comme ceci:

$var = 'Tom Greenleaf' 
$var = 'screenplay' 
$var = 'novella' 

Je sais que c'est un peu compliqué à faire mais il y a un modèle que nous pouvons utiliser.

En regardant la première variable, nous pouvons d'abord vérifier si la chaîne contient le texte « (comme ». Si elle fait alors nous devons supprimer « (comme » et tout ce qui vient après.

Dans le deuxième variable la règle que nous avons faite dans le premier s'applique également.Nous avons juste besoin également de supprimer la parenthèse

Dans la troisième variable si '(comme' n'a pas été trouvé, nous devons obtenir le premier mot seulement, puis supprimer le parenthèse

Eh bien, j'ai tout besoin de quelqu'un pour m'aider à le faire parce que je suis nouveau à PHP et je ne connais pas les expressions régulières .... ou une autre façon de le faire.

Merci!

Répondre

1

Essayez cette expression régulière:

(?:^[^(]+|(?<=^\()[^\s)]+) 

Cela vous obtiendrez soit quoi que ce soit à la première parenthèse ou le premier mot dans la première parenthèse. En collaboration avec preg_match:

preg_match('/(?:^[^(]+|(?<=^\\()[^\\s)]+)/', $var, $match); 
+0

preg_match ('/^(: [^ (] + | \\ ([^ \\ s)] +)/', $ var, $ match); récupère "Tom Greenleaf", "(scénario" et "(novella" – VolkerK

+0

Oui, comment puis-je supprimer la première parenthèse ouvrante dans cas il y en a un ??? – Jonathan

+0

Cela renvoie "Tom Greenleaf", "(scénario" et "(novella" mais avec un espace à la fin du mot. J'ai besoin de nettoyer cet espace. Aussi: Comment puis-je obtenir le résultat dans une variable et non dans un tableau ??? – Jonathan

2

En fait, il n'y a pas besoin de regex complexe

$var = 'Tom Greenleaf (as John Dunn Hill)'; 
$var = '(novella "Four Past Midnight: Secret Window, Secret Garden")'; 
$var = '(screenplay) (as The Wibberleys) &'; 
if ( strpos($var,"(as") !== FALSE){ 
    # get position of where (as is 
    $ind = strpos($var,"(as");  
    $result = substr($var,0,$ind);   
}else { 
    # if no (as, split on spaces and get first element 
    $s = preg_split("/\s+/",$var);  
    $result = $s[0]; 
}  
print preg_replace("/\(|\)/","",$result); 
0

essayez celui-ci

^\((?<MATCH>[^)]+)|^(?<MATCH>[^ ]+)

Questions connexes