무제한 숫자는 있지만 제한된 밑줄에 대해서는 정규 표현식을 찾으려고합니다.무제한 숫자이지만 제한된 다른 문자에 대한 정규 표현
그럼 max_underscore = 3
이라고 가정 해 보겠습니다.
그런 다음
123_456_678
는 확인 (3 개 밑줄)
1234213_2132135678
입니다 확인 (2 개 밑줄)
그러나
13_4156_7_012_1
이 확인되지 않습니다 (4 개 밑줄)
무제한 숫자는 있지만 제한된 밑줄에 대해서는 정규 표현식을 찾으려고합니다.무제한 숫자이지만 제한된 다른 문자에 대한 정규 표현
그럼 max_underscore = 3
이라고 가정 해 보겠습니다.
그런 다음
123_456_678
는 확인 (3 개 밑줄)
1234213_2132135678
입니다 확인 (2 개 밑줄)
그러나
13_4156_7_012_1
이 확인되지 않습니다 (4 개 밑줄)
밑줄은 시작 부분이나 끝 부분에 허용되지 않습니다이 허가되어 있지 않은 경우 2 개 이상의 연속 밑줄 :
^(?:\d+_?){3}\d+$
밑줄이 시작 부분이나 끝 부분에 허용되는 경우 :
^(?:\d*_?){3}\d*$
이 정규식 일치 문자열의 밑줄은 0에서 3까지이지만 그 이상은 아닙니다.
작업에서이 2 개 개의 정규 표현식에 참조 :
$strings = array(
'123456',
'1_2_3_456',
'123_456',
'_123_456_',
'1_2_3_4_5_6',
'123___456',
);
$num = 3;
echo 'using "^(?:\d+_?){3}\d+$"',"\n";
foreach($strings as $string) {
if (preg_match("/^(?:\d+_?){".$num."}\d+$/", $string)) {
echo "OK: $string\n";
} else {
echo "KO: $string\n";
}
}
echo 'using "^(?:\d*_?){3}\d*$"',"\n";
foreach($strings as $string) {
if (preg_match("/^(?:\d*_?){".$num."}\d*$/", $string)) {
echo "OK: $string\n";
} else {
echo "KO: $string\n";
}
}
출력 : [정규 표현식을 학습]의
using "^(?:\d+_?){3}\d+$"
OK: 123456
OK: 1_2_3_456
OK: 123_456
KO: _123_456_
KO: 1_2_3_4_5_6
KO: 123___456
using "^(?:\d*_?){3}\d*$"
OK: 123456
OK: 1_2_3_456
OK: 123_456
OK: _123_456_
KO: 1_2_3_4_5_6
OK: 123___456
가능한 중복 (http://stackoverflow.com/questions/4736/learning -regular-expressions) – Sayse
FWIW, 정규식이 필요하지 않습니다. 대부분의 언어는 문자열에서 문자의 발생 횟수를 찾는 방법이 있습니다. – Sayse
그렇다면 실제로 사용하는 언어/도구는 무엇입니까? –