coldfusion
RegExp를 사용한 작업 콜백 바꾸기
수색…
소개
ColdFusion에서 제공하는 정규식 함수의 한계를 발견했을 때 일반적인 정규 표현식으로 간단한 문자열 교체 이상을 원한다면 확실히 문제가 발생하여 벽에 부딪 힐 수 있습니다. PHP의 preg_replace_callback 과 같은 빌드 인 기능은 없습니다.
매개 변수
| 매개 변수 | 세부 |
|---|---|
re | 정규 표현식 |
str | 정규식에 적용해야하는 문자열 |
callback | 일치하는 항목이 발견되면 캡처 된 그룹화가 전달되는 함수입니다. 거기서 경기가 처리 될 수 있습니다. |
비고
ColdFusion 자체가 우리가 원하는 것을 제공하지 않기 때문에 우리는 Coldfusion 위에있는 다양한 자바에 의존합니다. Java는 java.util.regex.Pattern 제공합니다.
여기 실제로 우리가하는 일이 있습니다 :
-
Pattern클래스 객체에서Compile메서드를 호출하고 정규식 패턴을 전달하면 (나중에 사용할 수 있도록 정규식 패턴이 저장됩니다). -
Compile메서드가 반환 한 내용에 대해Matcher메서드를 호출하고 패턴을 실행해야하는 문자열을 전달합니다. -
Matcher메소드가 돌려주는 것에find메소드를 호출하는 것에 의해, 매칭이 성공했는지 어떠했는지를 테스트합니다.
matcher.find() 가 true 반환하면 "That 's it"이라고 말할 수 있습니다.하지만 고려해야 할 사항이 하나 있습니다. Java의 Pattern 객체는 그룹을 저장하고 다른 함수를 통해 액세스 할 수있게 해주므로 항상 최선의 방법은 아닙니다. 다른 프로그래밍 언어가이 경우를 어떻게 다루는 지에 대해서는 일관성이 없다. 따라서 우리는 matcher.group() 을 반복하여 캡처 된 그룹을 포함하는 배열을 콜백 함수에 전달할 수 있습니다. 그리고 이제 우리는 말할 수 있습니다 : "그게 다야!"
사용자 정의 REReplaceCallback 함수
function REReplaceCallback(re,str,callback) {
/*
Thanks to Ben Nadel
"Learning ColdFusion 8: REMatch() For Regular Expression Matching"
from 2007-06-13
https://www.bennadel.com/blog/769-learning-coldfusion-8-rematch-for-regular-expression-matching.htm
*/
pattern = CreateObject("java","java.util.regex.Pattern").Compile(Arguments.re);
matcher = pattern.Matcher(Arguments.str);
if(matcher.find()) {
groups = [];
for(var i = 1; i lte matcher.groupCount(); i++) {
ArrayAppend(groups,matcher.group(Val(i)));
}
return Arguments.callback(groups);
}
else {
return Arguments.callback(false);
}
}
REReplaceCallback 함수 사용
REReplaceCallback('YOUR REGEX GOES HERE','AND YOUR STRING HERE',function(groups) {
//now you can access the 'groups' array containing all the captured groups
return result; //return whatever you've processed inside
});
Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow