JSL REGEX 단어 경계 \ b<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />여보세요, -
JSL은 REGEX 단어 경계를 지원합니까? \ b?
나는 PAT MATCH 및 "\ bword \ b"표현식을 사용하여 텍스트의 완전한 단어를 대체하려고합니다. 어떤 이유로 인해 JSL은 \ W를 인식하고 처리하지만 \ b는 처리하지 않습니다. 불행히도 \ W는 그것이 소개하는 다른 이슈 중 하나의 단어 엔트리와 일치하지 않기 때문에 내 작업에 충분하지 않습니다.
예:
a = "창은 열려 있습니다";
p = pat regex ( "\ bis \ b");
팻 일치 (a, p, "was");
나는 그것을 반환 기대 : a = "window was : open";
감사! - 샤울
재 : JSL REGEX 단어 경계 \ b아, 아주 좋아. 감사합니다. JMP10은 전역 대체를 단순화 한 정규식 함수를 가지고 있습니다 :
regex ( "hello", "[^ aeiou]", "?", GLOBALREPLACE);
"? e ?? o"
RegexMatch ()는 외부 루프를 필요로합니다 (이전 예제의 while ()). PatMatch ()는 패턴의 일부로 정규 표현식을 사용할 수 있지만 patRegex () 내에서를 제외하고는 역 참조를 사용하지 않습니다. patMatch는 regex 언어가 아닌 patXXXX 함수를 사용하여 패턴을 작성하기위한 것이며 부분 일치를 캡처하는 다른 방법이 있습니다.
재 : JSL REGEX 단어 경계 \ b\ W (JMP9 accepted \ W)를 사용하여 Regex를 단순화했습니다.
x = "크고 빠른 여우";
a = Regex Match (x, "(\ W | ^) (매우) (\ W | $)", "\ 1fairly \ 3");
인쇄 (x);
내 유일한 남아있는 문제는 그것이 한 번만 교체하므로 더 이상 일치 항목이 반환되지 않을 때까지 루프가 필요하다는 것입니다. Regex Match에서 지정할 수있는 FULLSCAN 같은 플래그가 있습니까? 팻 매치 (Pat Match)를 어떤 이유로 든 사용할 수 없었습니다.
어쨌든, 당신은 저를 이미 많이 도왔습니다!
재 : JSL REGEX 단어 경계 \ b정규 표현식에서 괄호로 묶은 표현식은 숫자로 참조 할 수있는 캡처 그룹을 형성합니다. 열려있는 괄호를 왼쪽에서 오른쪽으로 세어 숫자를 얻으십시오. 캡쳐 그룹에 의해 매치 된 텍스트는 정규 표현식이나 대체 문자열에서 나중에 역 참조로 사용할 수 있습니다. \ 1은 첫 번째 캡처 그룹에 대한 역 참조입니다.
regexMatch (x, "([^ a-zA-Z0-9_] | ^) ([a-zA-Z0-9 _] {4}) ([^ a-zA- \ 1fairly \ 3 ");
3 개의 열려있는 parens가있다; 중간 세트 (일치하는 단어 주변)는 실제로 필요하지 않지만, 거기에 있기 때문에 대체 문자열에서 \ 1과 \ 3을 사용합니다. \ 0은 전체 일치를 나타냅니다. 괄호 그룹을 중첩 시키면 왼쪽에서 오른쪽으로 펼쳐진 괄호 만 계산합니다.
{4} 반복을 사용하여 원본 텍스트에서 3 자 및 5 자 단어를 찾지 못하게하는 예를 만들었습니다. 단어를 지정하려면 다른 방법이 필요할 수 있습니다. 한 번에 하나씩 단어를 씹는 예가 있습니다.
인쇄 (JMP 버전 ());
x = "크고 빠른 여우";
한편 (1,
결과 = 정규식 검색 (x, "([^ a-zA-Z0-9_] | ^) ([a-zA-Z0-9 _] +) ([^ a-zA-Z0-9_] | $) "\ 1 \ 3");
(N Items (results)> = 3이면,
인쇄 (결과 [3]),
단절()
);
);
"9.0.2"
"그만큼"
"큰"
"대단히"
"빨리"
"여우"
이 예에서 +는 "하나 이상의 이전 표현식"을 의미하므로 명시적인 길이가 필요하지 않을 수 있습니다. RegexMatch는 역 참조 목록을 반환합니다. 목록의 첫 번째 항목은 \ 0이며 전체 일치 항목을 나타냅니다. 결과 [3]은 \ 2이며 일치하는 단어입니다. 대체 문자열은 \ 1 \ 3이며 문자열에서 \ 2를 자릅니다.
정규식에 대한 자습서가있는 웹 사이트가 많이 있습니다. Regular-Expressions.info - Regex 자습서, 예제 및 참조 - Regexp Patterns 예를 들면.
JMP11의 \ b는 많은 예제를 단순화합니다.
재 : JSL REGEX 단어 경계 \ b이것은 JMP9에 있기 때문에 이것은 매우 도움이됩니다.
일치시킬 문자열의 길이에 따라 {n}을 (를) 동적으로 조정해야합니다.
대체 번호가 어떻게 작동하는지 자세히 설명해 주시겠습니까? 나는 \ 1과 \ 3이 무엇을하는지 잘 모르겠다.
고맙습니다! - 샤울
재 : JSL REGEX 단어 경계 \ bJMP10은 regex에서 \ b 단어 경계를 지원하지 않습니다. JMP11 것입니다. 다음 예제에서 {4}는 각 문자에 단어 경계를 요구하여 "매우"4 문자 단어를 일치시키려는 이전 문자의 4 번 발생을 의미합니다. regexMatch 함수는 두 번째 인수를 일반 표현식으로 해석하고 세 번째 인수를 캡처 괄호 그룹 뒤에 번호가 매겨진 대체 텍스트로 해석합니다 (두 번째 예제에서 사용됨).
print (JMPVERSION ());
x = "크고 빠른 여우";
regexMatch (x, "\ b \ w {4} \ b", "공정하게");
인쇄 (x);
"11.0.0"
"크고, 꽤 빠른 여우"
JMP10은 필요에 따라 분리 문자를 캡처하여 대체 문자열에 다시 삽입하여 충분히 처리 할 수 있습니다.
print (JMPVERSION ());
x = "크고 빠른 여우";
regexMatch (x, "([^ a-zA-Z0-9_] | ^) ([a-zA-Z0-9 _] {4}) ([^ a-zA- \ 1fairly \ 3 ");
인쇄 (x);
"10.0.1"
"크고, 꽤 빠른 여우"
\ b는 단어 앞뒤에 모두 일치해야하며 텍스트가 전혀 일치하지 않아 단어의 맨 처음 (^) 또는 맨 마지막 ($)에있을 수 있기 때문에 쓰기가 어렵습니다. 텍스트. 두 번째 예제는 대체 텍스트의 \ 1 및 \ 3 괄호 그룹을 사용하여 "전혀 텍스트 일치하지 않음"요구 사항을 해결합니다.