2010-10-11 18 views
0

J'ai écrit une regex pour diviser une chaîne de recherche en ses composants. Les caractéristiques comprennent:Polissage Regex: comment ne pas inclure des citations sur des sous-chaînes dans la recherche

  • Opérateurs: +, -, AND, OR
  • groupe de mots par des guillemets (simples et doubles pour l'instant)
  • Correctement ignorant apostrophes

Alors:

((?<=^|\s)(?:[\+\-]?"[^"]+"(?=\s|$)|[\+\-]?'[^']+'(?=\s|$)|[\+\-]?\S+|AND|and|OR|or)(?=$|\s)) 

Quel est le ea Siest moyen d'exclure les citations delimiter des résultats correspond? Exemple:

lsdkjflws's ldkj and "lfldkfjs's ldkjfls" lskdj 

résultats dans ces pièces:

  • lsdkjflws pour
  • ldkj
  • et
  • "ldkjfls pour lfldkfjs"
  • lskdj

Je don Je n'ai pas besoin de faire cela, je voudrais juste faire un pas de plus dans l'expression régulière.

+0

Quelle est exactement votre question? – Gumbo

Répondre

0

Quel moteur? Si elle prend en charge préanalyse négatif et positif, il est facile:

Au lieu de ces derniers:

"[^"]+" 

QU'AVEC quelque chose comme ceci:

(?<=")[^"]+(?=") 

Cette exclut ensuite les citations du match, mais correspond toujours seulement au contenu des citations. J'espère que c'est ce que vous recherchez.

+0

PCRE en PHP. J'ai décidé que puisque j'ai besoin de l'option facultative -/+, je dois supprimer les guillemets dans le code. –