2009-06-08 4 views
1

Ceci est ma première fois à travailler avec des expressions régulières et j'ai essayé d'obtenir une expression régulière de travail qui correspondrait à ce qui suit:co. corp. inc. expression régulière

  • pomme
  • inc pomme.
  • apple co.
  • apple corp.

mais ne correspondrait pas:

  • inc. pomme
  • co. pomme
  • apple co. inc.
  • apple corp. inc.
  • apple inc. corp.
  • et ainsi de suite ...

C'est ce que je suis arrivé à ce jour (Apple) \ s (inc | corp | co).

$

que vous pourriez aider à

:)

EDIT: Il doit fonctionner en Java. Est-ce que Java a sa propre syntaxe pour les expressions régulières?

Répondre

3

Vous y êtes presque:

^apple(?:\s(?:inc|co|corp)\.)?$ 

Notez que si vous voulez que votre regexp pour être insensible à la casse, vous devez soit passer le drapeau CASE_INSENSITIVE lors de la construction du modèle ou ajouter (?i) au motif.

+0

Un autre, et stupide, moyen d'obtenir la casse est-à-dire [Aa] [pP] [pP ] [lL] [eE], etc. –

+0

D'accord - c'est possible, et c'est bête. :-) Encore, un bon hack si vous êtes dans un contexte où vous ne pouvez pas passer l'option insensible à la casse. – markusk

1

Essayez quelque chose comme ceci:

^apple\s?(inc|corp|co)?\.?$ 

Soyez prudent avec les périodes car ils sont des jokers (mettre une barre oblique inverse devant eux) (.).

? signifie pas nécessaire

^signifie début de la ligne

signifie $ fin de la ligne

Regardez ici pour une explication plus complète: http://www.anaesthetist.com/mnm/perl/Findex.htm

1

Essayez ceci:

(?<!(?:inc|co|corp)\.\s)apple(?:\s(?:inc|co|corp)\.)? 

Il utilise un lookbehind négatif (?<! ) pour empêcher les préfixes, plus les groupes non-captureurs (?: ) de se défausser backreferences inutiles.

Le . a été échappé à \. car il est par ailleurs un symbole regex signifiant "n'importe quel caractère".

Le $ que vous avez utilisé signifie la fin de la ligne - donc à moins que vous ne vouliez que cela corresponde à la fin de votre chaîne, vous ne le voulez pas.
Cependant, si vous cherchez spécifiquement pour toute la chaîne étant "Apple inc." (Etc), vous pouvez garder le $ et remplacer le lookbehind négatif avec ^ pour simplifier l'expression:

^apple(?:\s(?:inc|co|corp)\.)?$