2010-08-27 7 views
0

J'ai un texte qui pourrait éventuellement inclure des mots, des chiffres, etc. Tout ce que je veux est de faire correspondre les chiffres entre crochets, mais withtout les jumelant comme ceci:match numéro entre crochets dans regex

Lorem 43 ipsum dolor 1 assis amet (355) certains autre texte.

Je veux correspondre au numéro 355, mais comme il y a des chiffres sans parenthèses, je reçois à ceci:

\(\b\d+\b\) - 1st variant 
\(.+?\)  - 2nd variant 

On peut supposer que je reçois (355), mais mon script php est déjà sous une charge lourde , correspondant à enlever les crochets n'est pas une option.

Répondre

0

Juste match comme votre 1ère variante, mais capturer seulement les chiffres dans un groupe, comme celui-ci

\((\d+)\) 

Et je pense que PHP supporte les groupes de capture nommés, vous pouvez donc le nommer, de sorte que vous ne cherchez pas elle par index, comme cela, je pense

preg_match('/\((?<MatchedNumber>\d+)\)/', $searchText, $groups); 
print_r($groups['MatchedNumber']); 
+0

étrange, mais cela ne fonctionne pas, correspond toujours les supports – Anonymous

+0

@Anonymous, ne cochez pas 'groupes $ [0]', il est dans 'groupes $ [1]' 'ou groupes $ ['MatchedNumber'] 'voir ma modification (en supposant que ma syntaxe est correcte) – CaffGeek

+0

Merci d'avoir oublié que preg_match renvoie le tableau. Encore merci. Tu m'as sauvé. – Anonymous

3

Si vous le souhaitez, vous pouvez supprimer les dans le premier « s \b; ils ne blessent rien mais ils sont redondants. Pour saisir le nombre et exclure les parenthèses, utilisez des parenthèses unescaped autour des chiffres:

\((\d+)\) 

Cette capture les chiffres pour une utilisation ultérieure. Par exemple:

preg_match('/\((\d+)\)/', $sentence, $matches); 
var_dump($matches[1]); 
+0

Ce que je veux est de faire correspondre les chiffres sans les parenthèses: à savoir (355) -> 355. – Anonymous

+0

@Anonymous qui est exactement ce que cela fait –

+0

Merci aussi la solution fonctionne aussi. – Anonymous