2010-03-18 5 views
2

Bonjour encore Stackoverflow personnes!Expressions régulières: Positive Lookahead et question Word Border

Supposons que je ces mots: smartphones, téléphones intelligents

Je veux correspondre à la sous-chaîne « téléphone » de leur intérieur. Cependant, dans les deux cas, je veux seulement que "téléphone" soit retourné, pas "téléphones" dans le premier cas. En plus de cela, je veux des correspondances seulement si le mot "téléphone" est un suffixe seulement, tel que:

fonephonetics (juste un exemple) ne correspond pas.

Je suppose que le regex

(phone([?=s])?)\b 

me donnerait ce que je dois, mais il est actuellement « téléphones assortissent » et « téléphone », mais pas les « fonephonetics » un. Je n'ai pas besoin de "téléphones". Je veux "téléphone" pour les deux cas.

Des idées sur ce qui ne va pas et ce que je peux faire?

Merci d'avance!

+1

Si vous savez quelle sous-chaîne vous recherchez, pourquoi avez-vous besoin de l'expression rationnelle pour renvoyer cette sous-chaîne? –

+0

Quelle langue utilisez-vous? [? = s] signifie généralement une classe de caractères qui correspond à '?', '=' ou 's'. –

+0

@Mark: Java. @mmyers: Parce que j'ai besoin de voir si "téléphone" se produit dans une série de lignes, et si c'est le cas, retourner les lignes qui le contiennent. Mais je veux aussi des variations de téléphone pour, par exemple. "téléphones" à apparier. Ceci est un exemple très simplifié btw. –

Répondre

5

pour correspondre phone suivi soit par s\b ou \b:

phone(?=s?\b) 

L'anticipation est d'une largeur nulle de sorte que le s ne seront pas retournés dans le cadre de la rencontre.

+0

Votre solution fonctionne. Que faire si je dois utiliser l'alternance pour faire correspondre une série d'autres mots comme suffixes (téléphone (? = S? \ B) | test | test2) \ b ne fonctionnera pas alors. Des solutions? –

+1

@Inf: Isolez l'alternance dans son propre ensemble de parenthèses: '(phone | test | test2) (? = S? \ B)' –

+0

Merci beaucoup! C'est ce que je voulais! :) Pourriez-vous s'il vous plaît me dire pourquoi, en mettant le (? = S? \ B) dans sa propre parenthèse, cela fonctionne? Ou pointez-moi un lien où je peux obtenir cette information? –