2013-03-20 4 views
4

Merci pour votre attention rapide à cette question! C'est très apprécié, merci à tous ceux qui ont commenté, ou offert un aperçu!Identifiant Preg_match

Hé les gars, je vais avoir un problème d'obtenir un match de mon identifiant

J'ai une chaîne comme celui-ci à venir en {/describe:foo} où je suis en train de match de {/describe:} retourner foo, mais je ne reçois pas l'expression rationnelle droite, quelqu'un d'esprit qui souligne ce que j'ai mal fait? voici mon match.

$regexp = '/\{describe:(.*?)\}/i'; 
$query = '{/describe:foo}'; 
preg_match($regexp, $query, $match); 

print_r($match); // (bool) false 

Contexte J'espère que cela peut aider les autres, une bonne raison de le faire est de créer remplaçables mots de commande dans une chaîne qui peut être interprété et remplacé, voici un exemple d'une affiche RESTful que exécutera un descripteur sur un mot de contrôle.

if (preg_match('/\{describe:(.*?)\}/i', $_POST['query'], $match)) 
    { 
     // Describe Salesforce Object from internal POST tool 
     print_r($SforceConnection->describeSObjects($match[1])); 
     exit; 
    } 

Répondre

3

Il vous manque la barre oblique dans votre regexp:

$regexp = '/\{\/describe:(.*?)\}/i'; 

ou:

$regexp = '#\{/describe:(.*?)\}#i'; 
+1

Merci pour la réponse super rapide, en attendant d'accepter. – ehime

+0

Accepté, merci encore pour votre réponse incroyablement rapide. – ehime

1

En termes simples votre pourrait utiliser: (?<=\/describe:).*(?=})

+0

Lance un 'modificateur inconnu. 'Juste un heads-up – ehime

+2

Je ne considère généralement pas les lookarounds comme étant" le plus simple ":) – Adrian

+0

@Adrian - Vrai ... J'allais plutôt me contenter de saisir un match complet, pas de sous- modèle. – Daedalus

3
$regexp = '/\{\/describe\:(.*?)\}/i'; 
$query = '{/describe:foo}'; 
preg_match($regexp, $query, $match); 

print_r($match); // Array ([0] => {/describe:foo} [1] => foo) 
1

Essayez (/ ressemble à manquer avant de décrire):

$regexp = '/\{/describe:(.*?)\}/i' 
+0

Les barres obliques sont les délimiteurs regex et sont requis (bien, un délimiteur est nécessaire, il ne doit pas être des barres obliques) – Adrian

+0

@Adrian J'ai édité mon post, il manque un '/' avant 'describe' dans son regex. – LaGrandMere

+0

Ah, je vois ce que tu veux dire. Un-down-voté :) – Adrian

2
$regexp = '#{/describe:([^}]+)}#i'; 
$query = '{/describe:foo}'; 
preg_match($regexp, $query, $match); 

print_r($match);