내가 내 안티 스팸/badwors 필터를 쓰고 있어요 그리고 가능하다면 내가 필요로 (만) 즉,정규식처럼 혼합 문자를 형성 매치 혼합 문자
이 (감지)와 일치하는 단어 만 $가 아닌 친구
이게 regex!
최고! 당신은 같은 일부 정규 표현식을 만들 수
내가 내 안티 스팸/badwors 필터를 쓰고 있어요 그리고 가능하다면 내가 필요로 (만) 즉,정규식처럼 혼합 문자를 형성 매치 혼합 문자
이 (감지)와 일치하는 단어 만 $가 아닌 친구
이게 regex!
최고! 당신은 같은 일부 정규 표현식을 만들 수
은 정규식으로 가능 (난 당신이 friend
뿐만 아니라 frie**
를 원하는 것 BADWORDS 필터 있으리라 믿고있어, 모든 가능한 순열뿐만 아니라 나쁜 단어를 마스크 할 수 있습니다)! 중첩 된 괄호와 일치하는 것을 요구하지 않습니다! : P
하지만 그렇습니다. 정규식이 구축 된 것입니다. 예 :
/\S*[^\w\s]+\S*/
이 다음의 모든 일치합니다 :
@ss
as$
a$s
@$s
a$$
@s$
@$$
그것은 것이다 하지 일치하는이 :
나는 당신이 원하는 것을 믿고ass
. 작동 방식 :
은 0 개 이상의 공백이 아닌 문자와 일치합니다. [^\w\s]+
은 기호 (단어 또는 공백이 아닌 모든 문자와 일치 함)와 일치하며 그 중 하나 이상과 일치합니다 (따라서 기호 문자가 필요합니다). \S*
은 0 개 이상의 공백이 아닌 문자와 다시 일치합니다 기호 및 문자).
더 나은 전략을 제안 할 수 있다면 Perl에서 변수에 정규 표현식을 저장할 수 있습니다.당신이 PHP에서이 작업을 수행 할 수 있을지 모르겠지만, 당신이 할 수있는 경우에, 당신은 같은 변수의 목록 구성 할 수 있습니다 :
$a = /[[email protected]]/ # regex that matches all a-like symbols
$b = /[bB]/
$c = /[cC(]/
# etc...
또는 : 그래서
$regex = array('a' => /[[email protected]]/, 'b' => /[bB]/, 'c' => /[cC(]/, ...);
그런 식으로, 당신이 할 수있는을
/$f$r$i$e$n$d/
또는 :
/$regex['f']$regex['r']$regex['i']$regex['e']$regex['n']$regex['d']/
을 가진 모든 순열의 일치 "친구"
허가 됨, 두 번째 것은 불필요하게 길어 보이지만, PHP는 당신을위한 것입니다. 두 번째 것은 아마 최선의 해결책이라고 생각합니다. 해시에 모든 것을 별도의 변수로 저장하는 것이 아니기 때문에 아마 최선의 해결책이라고 생각합니다.하지만 내가 만드는 정규 표현식이 좀 못생긴다는 것을 인정합니다.
다음
\p{L}+[\d\p{S}]+\S*
이 (Unicode character preferences를 참조 \p{L}+
) 하나 개 이상의 숫자 또는 기호 ([\d\p{S}]+
) 및 다음 하나 이상의 문자의 순서와 일치합니다 비 공백 문자 \S*
.
$str = 'fr1&nd$ and not friends';
preg_match('/\p{L}+[\d\p{S}]+\S*/', $str, $match);
var_dump($match);
매우 정규식 규칙은 없지만 기본적으로 정규식을 사용하여 설명 할 수있는 모든 패턴과 일치 할 수 있습니다. 까다로운 부분은 그것을 설명하고 있습니다.
난 당신과 같이 나쁜 단어를 감지하는 정규식 규칙의 무리했을 것이라고 추측 것 :
: FR ** 차 * 당신은 같은 정규 표현식을 사용할 수이 FR1에게 & 차의 $ 친구를 검색하려면를
/fr[1iI*][&eE]nd[s$Sz]/
각 규칙에 대해 이와 같이 처리하면 대괄호 안에 가능한 모든 문자가 표시됩니다. 자세한 정보는 정규식 가이드를 참조하십시오.
물론
. regexes는 꽤 끔찍한 것처럼 보이는데, 특히 맞춤법 오류를 설명하려고 할 때 그렇습니다. –
철저하게 이것을 테스트하지 못했지만,이 그것을 수행해야합니다 나는 지루했고 펄에 한 번 이런 짓을
(\w+)*(?<=[^A-Za-z ])
"a"(공백 뒤에 오는 단어)와 일치합니다. –
나의 나쁜 :) 나는 그것을 바꿨다, 여분의 공간은 그것을해야한다. –
나는 탭으로도 갈 것이지만 이것은 효과가있다. –
굉장한 정규식 + 설명 +1! Btw, PHP의 Regex는 문자열에 저장되므로, 여러분이 제안하는 것과 같은 변수 치환이 가능하다는 것은 확실합니다. –
사실, 그것을 함수에 작성하는 것이 흥미로울 수 있습니다. 일반 단어를 전달하면 해당 단어를 감지하는 올바른 정규식으로 응답합니다. 내가 볼 수있는 유일한 문제는 W = \/\/또는 여러 가지 문자와 같은 것입니다. –
W =! (? : [wW] | \\/\\ /)! (필자의 Perl에서). 다중 문자 일치가있는 W와 같은 경우에는 더 어려울 수 있지만 확실히 가능합니다. 문자를 통해 문자열을 통과하고 해당 문자와 일치하는 정규식을 검색 한 후 함수를 하나의 거대한 (끔찍한 모양의) 정규식으로 모으는 함수를 쉽게 작성할 수 있습니다. 워드. 그러나 필자는 PHP를 자주 사용하지는 않습니다. 변덕 스러울 때 Perl에서 할 수 있습니다. 아니면 그 표정이 무엇이든간에. –