8
votes

Regex ancrages à l'intérieur de la classe de caractères

est-il possible d'utiliser des ancrages dans une classe de caractères? Cela ne fonctionne pas: xxx

il ressemble à ^ et $ est traité comme littéral lorsque vous êtes dans une classe de caractères; Cependant, les échapper ( \ ^ , \ $ ) ne fonctionne pas non plus.

J'essaie d'utiliser cette expression pour créer des limites de mots ( \ b n'est pas disponible dans XSLT / XQuery), mais je préférerais ne pas utiliser de groupes ( (^ | | \ s) ) - Comme les groupes non capturants ne sont pas disponibles, cela signifie que dans certains scénarios, je peux me retrouver avec une grande quantité de groupes de capture inutiles, ce qui crée une nouvelle tâche de trouver le "Real" Capturez des groupes dans l'ensemble des inutiles.


2 commentaires

Quiconque a voté pour la fermer comme dupliquer, pouvez-vous fournir un lien vers la prétendue question en double?


@Larsh Ce n'était pas moi, mais c'est la prétendue Dupe: Stackoverflow.com/Questions/9622869/... . Bien qu'il y ait quelques points communs, je pense que c'est un problème sensiblement différent.


3 Réponses :


0
votes

Utiliser le caret après que le premier support carré annulera la classe de caractères. Cela vous donne essentiellement le contraire de ce que vous cherchez à faire, ce qui signifie que la classe de caractères correspondra à n'importe quel caractère qui n'est pas dans la classe de caractères. Les classes de caractères annulées correspondent également à des caractères de pause de ligne (invisibles).

Vous pouvez essayer de faire un look négatif éventuellement. xxx


1 commentaires

Malheureusement, des regards / derrière ne sont pas inclus dans Regex dans les spécifications XQuery et XSLT. J'ai mis à jour la regex pour être plus clair - je voulais en fait inclure l'ancre dans la classe de caractères. L'objectif est de nécessiter une appariement "espace ou début / end-anchor (sans capture)".



6
votes

Je pense que la réponse est non, vous ne pouvez pas inclure ^ et $ comme ancre dans un [] , seulement en tant que caractères littéraux . (J'ai souhaité pouvoir le faire avant aussi.)

Cependant, vous pouvez concéder un espace à l'avant et à l'arrière de la chaîne, puis cherchez simplement \ s comme limites de mots et jamais pensez les ancres. Par exemple xxx

Vous pouvez également vouloir + après chaque \ s , mais c'est un problème distinct.


1 commentaires

C'est un hack, mais je vais le prendre!



3
votes

Si vous utilisez analysez-chaîne en fonction, vous utilisez probablement une implémentation 3.0 de XSLT ou XQuery.

Dans ce cas, pourquoi dites-vous que "des groupes non capturants ne sont pas disponibles"? Fonctions XPath et opérateurs 3.0 SPEC < / a> est explicite que "des groupes non capturants sont également reconnus. Ceux-ci sont indiqués par la syntaxe (?: xxxx)"


1 commentaires

J'utilise Marklogic, qui n'a qu'un sous-ensemble de 3,0 implémenté.