2009-06-08 12 views
1

Dies ist mein erstes Mal mit regulären Ausdrücken arbeiten, und ich habe versucht worden, einen regulären Ausdruck zu erhalten, dass die Arbeit würde passen die folgenden:co. Korporation inc. regulärer Ausdruck

  • Apfel
  • apple inc.
  • apple co.
  • apple corp.

aber würde nicht passen:

  • inc. Apfel
  • co. Apfel
  • Apfel co. inc.
  • apple corp. inc.
  • apple inc. Korporation
  • und so weiter ...

Das ist, was ich habe bisher (Apfel) \ s (inc | corp | co).

$

Sie :)

helfen einfiel

EDIT: Es muss in Java arbeiten. Hat Java eine eigene Syntax für reguläre Ausdrücke?

Antwort

3

Sie haben es fast geschafft:

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

Beachten Sie, dass, wenn Sie Ihr regexp wollen Groß- und Kleinschreibung zu sein, müssen Sie entweder die CASE_INSENSITIVE Flagge passiert, wenn das Muster der Konstruktion oder (?i) dem Muster hinzufügen.

+0

Ein alternativen und albern, Art und Weise Groß- und Kleinschreibung zu erhalten sind, sagen [Aa] [pp] [pP ] [lL] [eE] usw. –

+0

Einverstanden - es ist möglich, und es ist albern. :-) Trotzdem, ein netter Hack, wenn Sie in einem Kontext sind, in dem Sie die Groß-/Kleinschreibung nicht beachten können. – markusk

1

versuchen, etwas wie folgt aus:

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

Seien Sie vorsichtig mit den Zeiten, da sie Platzhalter sind (bitte einen umgekehrten Schrägstrich vor ihnen) (.).

? bedeutet nicht

erforderlich

^bedeutet Anfang der Zeile

bedeutet $ Ende der Leitung

Schauen Sie hier für eine vollständigere Erklärung: http://www.anaesthetist.com/mnm/perl/Findex.htm

1

Try this:

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

Es verwendet ein negatives Lookbehind (?<! ), um zu verhindern, dass die Präfixe plus nicht einfangende Gruppen (?: ) verwerfen unnötige Rückreferenzen.

Die . wurde zu \. maskiert, da es sonst ein Regex-Symbol ist, das "beliebiges Zeichen" bedeutet.

Die von Ihnen verwendete $ bedeutet Ende der Zeile - wenn Sie nicht möchten, dass dies nur am Ende der Zeichenfolge übereinstimmt, möchten Sie es nicht.
Wenn Sie jedoch sind Suche speziell für die gesamte Zeichenfolge "Apple Inc.". (Etc), dann können Sie die $ halten und ersetzen die negativen Lookbehind mit ^ den Ausdruck zu vereinfachen:

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