2015-05-04 12 views
5

Używam reMatch, aby uzyskać dopasowany podciąg z listy. Ale kiedy używam prefiksu, to otrzymuję błąd. (? < ...)Obejrzenie prefiksu Regex nie działa w trybie coldfusion 10

Sekwencja nie rozpoznał

Kod:

<cfset local.path = "schedule.category.classes.name,schedule.category.classes.id"> 
<cfset local.regex = "(?<=schedule.category.classes.)[a-zA-Z0-9_]*?(?=,|$)"> 
<cfset local.output = reMatch(local.regex, local.path)> 

Czego mi brakuje?

+2

Może ten artykuł o reefxie coldfusion będzie wyglądał dobrze. http://blog.adamcameron.me/2012/12/regular-expressions-in-coldfusion-part_26.html?m=1 – bloodyKnuckles

Odpowiedz

4

tracisz bitu o czytaniu docs ;-) - Regular expression syntax - Using special characters - look tyłki & arounds nie są obsługiwane w Zwyczaj regex CFML (który jest dawno nieżywy Apache ORO).

Jednak łatwo jest użyć zamiast tego implementacji regex java, która ma wsparcie: java.util.regex.Pattern - Special constructs (named-capturing and non-capturing).

Napisałem dwie części z trzyczęściowej serii na temat używania wyrażeń regularnych Java w CFML: "Regular expressions in CFML (part 9: Java support for regular expressions (1/3))". Muszę wrócić do wykonania części 3 w pewnym momencie, ale to, czego potrzebujesz, to w każdym razie pierwsze części.

Ben Nadel również pisze obszernie na temat używania wyrażeń regularnych Java w CFML. Po prostu wykonaj szybkie google, jeśli utkniesz, gdy spojrzysz na @ moje notatki (ale daj mi znać, gdzie utkniesz, jeśli to zrobisz, więc mogę powtórzyć moje sformułowanie!).

+0

Przegięcia są obsługiwane przez wyrażenia ColdFusion, ale elementy lookbehinds nie są. Możesz także, jeśli używasz systemu Windows z IIS, użyj wyrażeń regularnych .Net. –

+0

Jako bonus, nawet przy obciążeniu, przekonasz się, że silnik regex java jest szybszy niż ColdFusion. Powinieneś także poczuć się błogosławionym, że Adam odpowiada na pytania dotyczące CF, kiedy jest teraz pełnoetatowym programistą PHP. –

+0

To tylko dlatego, że nie jestem wystarczająco dobry @ PHP jeszcze pomóc tam. Poza tym trudno jest uzyskać odpowiedź wystarczająco szybko z PHP! –

1

Podkładki nie są dostępne w regex Coldfusion. Zamiast reMatch, można użyć REReplace usunąć wszystko wokół napisu trzeba uzyskać:

<cfset local.path = "schedule.category.classes.name,schedule.category.classes.id"> 
<cfset local.regex = "schedule\.category\.classes\.([a-zA-Z0-9_]+).*$"> 
<cfset local.output = REReplace(local.path,local.regex,"\1")> 
Powiązane problemy