2010-10-14 4 views
0

J'ai une chaîne:Regex remplacement

users/554983490\/Another+Test+/Question????\/+dhjkfsdf/

Comment puis-je écrire un RegExp qui correspondrait à tous les barres obliques pas précédée d'une barre oblique inverse?

EDIT: Existe-t-il un moyen de le faire sans utiliser un lookbehinds négatif?

+2

Quelle langue êtes-vous en utilisant pour votre RegExp? Il y a beaucoup de saveurs ... – gnarf

+0

Vous ne pouvez pas le faire de manière fiable, même avec lookbehinds. Mais si vous nous dites ce que vous essayez d'accomplir, nous pouvons probablement suggérer une approche différente. –

Répondre

2

Si vos expressions régulières prennent en charge negative lookbehinds:

/(?<!\\)\// 

Sinon, vous besoin de faire correspondre le caractère avant le / ainsi:

/(^|[^\\])\// 

Correspond au début d'une chaîne (^) ou (|) autre chose qu'un \ ([^\\]) en tant que groupe de capture n ° 1 (). Ensuite, il correspond au littéral / après. Quel que soit le caractère était avant la / seront stockées dans le groupe de capture $1 afin que vous puissiez remettre si vous faites remplacer ....

Exemple (JavaScript):

'st/ri\\/ng'.replace(/(^|[^\\])\//, "$1\\/"); 
// returns "st\/ri\/ng" 
+0

oui mais cela inclut également la lettre précédente –

+0

Le lookbehind négatif ne l'inclut pas ... Le second match sera, mais si vous ne supportez pas les lookbehinds négatifs, c'est votre seule option ... Vous pourriez faire quelque chose comme ' 'st/ri \\/ng'.replace (/ (^ | [^ \\]) \ //, "$ 1 \\ /"); 'en javascript par exemple pour ajouter le backslash à n'importe quel'/' Je ne l'ai pas déjà. – gnarf

2

Vous pouvez utiliser ceci:

/(?<!\\)\// 

Ceci est appelé negative lookbehind.

I utilisé/comme délimiteurs

(?<! <-- Start of the negative lookbehind (means that it should be preceded by the following pattern) 
    \\  <-- The \ character (escaped) 
)  <-- End of the negative lookbehind 
\/  <-- The/character (escaped) 
Questions connexes