2010-12-07 5 views
0

J'utilise php et j'utilise des expressions régulières pour essayer de détecter une citation.détecter une citation dans une chaîne

Je voudrais que cela pour trouver des correspondances que si elle trouve une citation dans la chaîne

HELLO 

Shouldnt trouver des matchs

"HELLO" 

devrait trouver un match

"HELLO 

Toujours devrait trouver un match

+0

Vous essayez de faire correspondre la chaîne entière qui contient une citation? –

+0

Devrait-il correspondre à une citation de chaque côté? Est-ce que "HELLO" 'devrait correspondre? – Anthony

+0

Si vous voulez simplement trouver un guillemet, strpos sera beaucoup plus efficace que l'utilisation de regexp. –

Répondre

4

L'expression régulière est juste le caractère de citation.

echo preg_match('/"/', $string); 

qui renverra 0 pour HELLO, 1 pour "HELLO" et 1 pour "HELLO

+0

Faux, il retournera 0 pour 'BONJOUR ', 1 pour'' BONJOUR ''et 1 pour' " BONJOUR – Stephen

+0

Vous confondez 'preg_match' avec' preg_match_all' – Stephen

+0

Incorrect. Tu ne sais pas ce que je pensais. –

3

Vous pouvez utiliser une expression régulière avec preg_match, qui vérifie pour tout guillemet dans lachaine $:

if(preg_match('"', $thestring)) { ... }

Mais il peut être plus rapide d'utiliser la fonction strpos à la place:

if(strpos($thestring, '"') !== false) { ... }

Le code à l'intérieur des instructions if ne sera exécuté que si un guillemet est trouvé. Mes exemples de code ne retourneront pas quel texte a été cité, bien que vous puissiez certainement le faire avec quelques changements.

+0

Vous devez corriger 'if (strpos ($ thestring, '"')) '. Si le guillemet est le premier caractère, strpos renverra '0'. Cette ligne devrait être 'if (strpos ($ thestring, '"')! == false) ' – Stephen

+0

Merci d'avoir remarqué que Stephen, j'ai mis à jour mon exemple en conséquence –

+0

+1 pour l'exactitude .C'est aussi beaucoup plus facile à lire – Stephen

1

Utilisez "(.*?)(\n|\r|$|").

Exemple:

http://img221.imageshack.us/img221/2994/screenshot2z0.png

EDIT: D'après vos commentaires, je comprends que vous n'avez pas besoin de cela; ce dont vous avez besoin est la réponse de Colin O'Dell (à savoir la fonction strpos). Pourtant, je laisse ceci ici au cas où quelqu'un d'autre en aurait besoin.

+0

+1 pour l'exemple visuel :) –

+0

@Colin O'Dell Je pense que les exemples visuels (c'est-à-dire les captures d'écran RegExr) sont les meilleurs pour trouver des trucs regex (comme jsfiddle est pour les trucs html/css/js) –

0
["]*HELLO["]* 

correspondra à HELLO avec ou sans guillemets de chaque côté.

Ou vous pouvez utiliser

"{0,1}HELLO"{0,1} 
+1

Est-ce que vous regardez la même question que moi? – Stephen

+0

@Stephen, Oui, désolé, j'ai complètement mal lu la question –

1

pas si difficile, à mon humble avis :) Je suppose que vous essayez juste de déterminer s'il y a une citation dans la chaîne donnée ou pas, non? Ainsi, il peut par fait par

preg_match('/"/',$string) 

ou plus efficacement par

strpos($string,'"') || $string == '"' 
+0

Comme Stephen l'a noté dans mon exemple, pour une chaîne commençant par une double-citation, strpos retournera 0 qui pourrait être interprété comme booléen faux sans les opérateurs === ou! == . –

+0

+ 1 pour fournir strpos() alternative à sa question – Craige

+0

@Craige même si elle pourrait conduire à une erreur depuis 'strpos ('"', '"') === 0'. – Stephen

Questions connexes