2010-10-10 4 views
1

J'ai besoin d'une expression régulière pour correspondre à un format de phrase très spécifique. Le format est le suivant:Besoin d'une expression régulière pour le format de phrase spécifique correspondant

mot (qui peut contenir ,()[]&^%# and whitespace), mot (qui peut contenir ,()[]&^%# and whitespace), mot (qui peut contenir ,()[]&^%# and whitespace)

Donc, fondamentalement, il est un mot, mot, mot, mais chaque mot peut contenir des caractères spéciaux et des espaces. Quelqu'un peut-il m'aider s'il vous plaît?


Ce sont les exemples:

  1. Various Artists, Total 6, je CONSTRUIT Cette ville (Michael Mayer Mix)
  2. Ada, Blindhouse/luckycharm, luckycharm
  3. Hector, Orale, Orale (Alex Picone Remix)
+0

Ce qui constitue un "mot" pour vous? Caractères alphabétiques minuscules uniquement? Les mots ont tendance à ne pas inclure les espaces blancs ... –

+0

Ok, vous avez raison - c'est phrase, phrase, phrase alors. Ils peuvent être en minuscules et en majuscules. – Pavel

+0

Je ne pense pas que votre modèle soit clairement décrit. Peut-être pourriez-vous poster un exemple. –

Répondre

2

J'utiliser cette solution:

/(?x)([a-z\\d\\s()[\\]&^%#\\/]+),((?1)),((?1))/i 

De cette façon, vous ne devez pas répéter votre modèle.

Code on ideone

+0

Cela ne fonctionnerait-il pas seulement si le premier mot était répété trois fois? –

+1

@Nev Stokes, pas (voir le code sur ideone), il utilise des sous-modèles. Ce n'est pas '\ 1'. –

+0

+1 c'est nouveau pour moi. Pourriez-vous fournir une référence? (Seulement trouvé '\ 1' dans le manuel.) – NikiC

1

Je ne suis pas sûr que vous voulez inclure le , qui délimite vos phrases dans le modèle autorisé. Si vous voulez faire correspondre une phrase trois fois:

/^[a-z()[]&^%#\s]+,[a-z()[]&^%#\s]+,[a-z()[]&^%#\s]+$/i 
+0

Je viens de remarquer que votre second exemple a un/qui ne correspond pas au motif que vous définissez. –

+1

Pas besoin d'échapper tous ces caractères; dans les classes de caractères, seuls '\' et ']' (en fonction de la position, aussi '^' et '-') sont des caractères spéciaux qui doivent être échappés. Donc '[a-z() [\\] & ^% # \ s]' suffit. – Gumbo

+0

Bien sûr, idiot moi! Modifié pour refléter votre commentaire –

Questions connexes