또 다른 까다로운 preg_match
-
13-09-2019 - |
문제
단락에 "중지 단어"가 포함되어 있는지 확인하면됩니다. 중지 단어는 아래 배열에 있습니다.
나는 다음과 같은 공식을 가지고 있었다.
$pattern_array = array("preheat", "minutes", "stir", "heat", "put", "beat", "bowl", "pan");
foreach ($pattern_array as $pattern) {
if (preg_match('/'.$pattern.')/i', $paragraph)) {
$stopwords = 1;
}
}
그것은 충분히 잘 작동하지만 'pan'과 같은 짧은 단어의 경우 'panko'와 같은 단어는 중지 단어로 식별됩니다.
따라서 Regex는 이전 공간이 있거나 새 라인의 시작이어야하며 전체 정지/공간/쉼표/(다른 비 캐릭터 객체)로 끝납니다.
또한 중지 단어가 식별 되 자마자 PHP에 루프를 종료하라고 어떻게 알 수 있습니까?
감사합니다.
해결책
사용 \b(preheat|minutes|stir|heat|put|bowl|pan)\b
당신의 regex로. 그렇게하면, 당신은 단 하나의 regex (루핑 필요 없음) 만 필요하며 \b
단어 경계 주장, 전체 단어 만 일치하는지 확인합니다.
다른 팁
이것을 시도하지는 않았지만 \b
당신이 찾고있는 캐릭터 그룹이어야합니다. 로부터 PHP 매뉴얼:
\b word boundary
그러면 코드가 다음과 같이 보입니다.
$pattern_array = array("preheat", "minutes", "stir", "heat", "put", "beat", "bowl", "pan");
foreach ($pattern_array as $pattern) {
if (preg_match('/\b'.$pattern.'\b/i', $paragraph)) { // also removed the ')'
$stopwords = 1;
break; // to exit the loop
}
}
편집 : 사람들이 b를 사용하는 것이 더 나은 것 같습니다.
추가해야합니다 \b
(단어 경계를 나타냅니다) : 당신의 regex와 같이 :
'/\b'.$pattern.'\b/i'
코드에 오타가있는 것 같습니다. 문자 그대로 닫는 괄호가 있고 단어의 일부와 일치하지 않거나 열린 닫기 브래킷이 있기 때문입니다.
1. " b"를 사용하여 단어 경계를 확인할 수 있습니다. 단어 경계는 단어 문자와 비 단어 문자 사이의 경계로 정의됩니다. 단어 문자는 글자, 숫자 및 밑줄입니다.
2. "|"를 사용하여 한 번에 모든 것을 할 수 있습니다.
$stopwords = preg_match('/\\b(preheat|minutes|stir|heat|..other words..|pan)\\b/i', $paragraph)