2013-05-29 8 views
6

Bir karakter sınıfının içinde çapa kullanmak mümkün mü? Bu işe yaramazsa:Karakter sınıfının içindeki Regex tutturmaları

analyze-string('abcd', '[\s^]abcd[\s$]') 

O ^ ve $ benzediği zaman bir karakter sınıfı içinde değişmez olarak ele alınır; Ancak, bunlardan kaçmak (\^, \$) da çalışmıyor.

kelimesini sınırlarını oluşturmak için bu ifadeyi kullanmaya çalışıyorum (\b XSLT'de/XQuery kullanılamaz), ama grupları kullanmak için değil ((^|\s)) tercih ediyorum - olmayan yakalama grupları mevcut olmadığından, Bu, bazı senaryolarda gereksiz miktarda gereksiz yakalama grupları ile sonuçlanabileceğimi ve bu, gereksiz gerçekler grubunda "gerçek" yakalama gruplarını bulmanın yeni bir görevini oluşturduğum anlamına gelir.

+0

Bunu kopya olarak ikiye katlayan kişi, iddia edilen yinelenen soruya bir bağlantı sağlayabilir misiniz? – LarsH

+0

@LarsH Ben yapmadım, ama bu sözde dupe geçerli: http://stackoverflow.com/questions/9622869/cvc-pattern-valid-value-a-is-not-facet-valid-with-respect- için-desen-a-za. Birkaç ortak nokta olmasına rağmen, bence oldukça farklı bir problem. – wst

cevap

4

Sana [] çapa, yalnızca değişmez karakter olarak ^ ve $ içeremez, cevap hayır inanıyoruz. (Bunu daha önce de yapabilirdiniz.)

Bununla birlikte, dizenin önünde ve arkasında bir boşluk yaratabilirsiniz, daha sonra sözcük sınırları olarak \s'u arayın ve ankrajları boşver. Örneğin.

analyze-string(concat(' ', 'abcd xyz abcd', ' '), '\sabcd\s') 

Ayrıca her \s sonra + isteyebilirsiniz, ama bu ayrı bir mesele.

+0

Bu bir hack, ama ben alacağım! – wst

0

İlk köşeli ayraçtan sonra düzeltme çubuğunu kullanmak karakter sınıfını geçersiz kılar. Temel olarak, yapmak istediğiniz şeylerin tam tersini verir, yani karakter sınıfı, karakter sınıfında olmayan herhangi bir karakterle eşleşir. Olumsuz karakter sınıfları da (görünmez) satır sonu karakterleriyle eşleşir.

Muhtemelen olumsuz bir bakış açısı yapmayı deneyebilirsiniz.

(?!\s) 
+0

Maalesef, XQuery ve XSLT teknik özelliklerinde ifadeli olarak geriye/ileriye yer verilmiyor. Daha net olmak için düzenli ifadeyi güncelledim - aslında ankrajı karakter sınıfına dahil etmeyi planladım. Amaç eşleşen "boşluk VEYA başlangıç ​​/ bitiş çapa (yakalama olmadan)" gerektirir. – wst

2

sonra muhtemelen XSLT'DE veya XQuery ya bir 3.0 uygulaması kullanıyorsanız, bir fonksiyonu olarak analyze-string kullanıyorsanız. Bu durumda

, neden "olmayan yakalama grupları mevcut değildir" diyorsunuz? XPath Functions and Operators 3.0 spec, "Yakalamayan gruplar da tanınır." Ifadesi, sözdizimi (?: Xxxx) ile belirtilir.

+0

Yalnızca, 3.0 uygulanan bir alt kümesine sahip MarkLogic kullanıyorum. – wst