2015-05-04 13 views
5

Tôi đang sử dụng reMatch để có được những chuỗi con xuất hiện từ một danh sách. Nhưng khi tôi đang sử dụng tiền tố lookaround sau đó tôi nhận được lỗi. (? < ...)Regex tiền tố lookaround không làm việc trong Coldfusion 10

trình tự không được công nhận

Code:

<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)> 

tôi thiếu gì?

+2

Có lẽ bài viết này về Coldfusion regex quanh nhìn sẽ rất hữu ích. http://blog.adamcameron.me/2012/12/regular-expressions-in-coldfusion-part_26.html?m=1 – bloodyKnuckles

Trả lời

4

Bạn đang thiếu chút về đọc các tài liệu ;-) - Regular expression syntax - Using special characters - Nhìn behinds & quanh không được hỗ trợ trong CFML của hương vị của regex (đó là dài chết Apache ORO).

Tuy nhiên, thật dễ dàng, đủ để sử dụng triển khai regex của java thay vào đó, trong đó không hỗ trợ xem sau: java.util.regex.Pattern - Special constructs (named-capturing and non-capturing).

Tôi đã viết hai phần của loạt bài ba phần về cách sử dụng các regex trong Java trong CFML: "Regular expressions in CFML (part 9: Java support for regular expressions (1/3))". Tôi phải quay trở lại để làm phần 3 tại một số điểm, nhưng những gì bạn cần là trong phần coupla đầu tiên dù sao đi nữa.

Ben Nadel cũng viết rất nhiều bài về việc sử dụng regexes Java trong CFML. Chỉ cần làm một google nhanh chóng nếu bạn gặp khó khăn khi nhìn @ ghi chú của tôi (nhưng hãy cho tôi biết nơi bạn gặp khó khăn nếu bạn làm, vì vậy tôi có thể xem lại từ ngữ của tôi!).

+0

Lookaheads được hỗ trợ bởi regexes ColdFusion, nhưng lookbehinds thì không. Bạn cũng có thể, nếu bạn đang sử dụng một hộp Windows đang chạy IIS, hãy sử dụng biểu thức chính quy .Net. –

+0

Như một phần thưởng, ngay cả với các nguyên cần thiết, bạn sẽ thấy rằng động cơ java regex là nhanh hơn so với ColdFusion. Ngoài ra, bạn sẽ cảm thấy may mắn khi Adam đang trả lời các câu hỏi CF khi anh ta là một nhà phát triển PHP toàn thời gian. –

+0

Nó chỉ cos Tôi không đủ tốt @ PHP chưa giúp đỡ ra khỏi đó. Thêm vào đó là khó khăn để có được một câu trả lời đủ nhanh với những cái PHP! –

1

Look-behinds không có sẵn trong mẫu regex Coldfusion. Thay vì reMatch, bạn có thể sử dụng REReplace để loại bỏ tất cả mọi thứ xung quanh chuỗi bạn cần phải có được:

<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")> 
Các vấn đề liên quan