문자열에 특정 단어가 포함되어 있는지 어떻게 확인합니까? 이 질문에 대한 답변은

치다:

$a = 'How are you?';

if ($a contains 'are')
    echo 'true';

위의 코드가 있다고 가정하면 문장을 작성하는 올바른 방법은 무엇 if ($a contains 'are')입니까?



답변

strpos()다른 문자열 내에서 한 문자열의 발생을 찾는 데 사용되는 함수를 사용할 수 있습니다 .

$a = 'How are you?';

if (strpos($a, 'are') !== false) {
    echo 'true';
}

사용 !== false은 의도적입니다 ( 원하는 결과 != false=== true반환 하지도 않습니다 ). strpos()haystack 문자열에서 바늘 문자열이 시작되는 오프셋 또는 false바늘을 찾을 수없는 경우 부울을 반환합니다. 0은 유효한 오프셋이고 0은 “falsey”이므로보다 간단한 구문을 사용할 수 없습니다 !strpos($a, 'are').


답변

정규 표현식을 사용할 수 있습니다. strpos다른 사용자가 언급 한 것 보다 단어 일치가 더 좋습니다. 운임, 관리, 응시 등과 같은 문자열에 대해서도 true를 반환합니다. 단어 경계를 사용하여 정규 표현식에서 간단히 피할 수 있습니다.

에 대한 간단한 일치는 다음과 같이 보일 수 있습니다.

$a = 'How are you?';

if (preg_match('/\bare\b/', $a)) {
    echo 'true';
}

성능 측면에서 strpos약 3 배 빠르며 한 번에 백만 번 비교를하면 preg_match1.5 초가 strpos걸리고 0.5 초가 걸렸습니다.

편집 : 단어별로뿐만 아니라 문자열의 일부를 검색하려면 다음과 같은 정규 표현식을 사용하는 것이 좋습니다

$a = 'How are you?';
$search = 'are y';
if(preg_match("/{$search}/i", $a)) {
    echo 'true';
}

i정규 표현식의 끝에 당신이 그렇게하지 않으려면, 당신은 그것을 밖으로 남길 수 있습니다, 대소 문자를 구분하는 정규 표현식을 변경합니다.

이제 $ search 문자열이 어떤 식 으로든 위생 처리되지 않기 때문에 어떤 경우에는 문제 $search가 될 수 있습니다. 다른 정규식 …

또한 다양한 정규식 Regex101에 대한 설명을 테스트하고 설명하는 훌륭한 도구가 있습니다.

두 기능 세트를 단일 다목적 기능 (선택 가능한 대소 문자 구분 포함)으로 결합하려면 다음과 같이 사용할 수 있습니다.

function FindString($needle,$haystack,$i,$word)
{   // $i should be "" or "i" for case insensitive
    if (strtoupper($word)=="W")
    {   // if $word is "W" then word search instead of string in string search.
        if (preg_match("/\b{$needle}\b/{$i}", $haystack))
        {
            return true;
        }
    }
    else
    {
        if(preg_match("/{$needle}/{$i}", $haystack))
        {
            return true;
        }
    }
    return false;
    // Put quotes around true and false above to return them as strings instead of as bools/ints.
}

답변

다음과 같은 상황에서 유용한 작은 유틸리티 함수가 있습니다.

// returns true if $needle is a substring of $haystack
function contains($needle, $haystack)
{
    return strpos($haystack, $needle) !== false;
}

답변

보통이 아니다 당신의 문자열의 하위 문자열이 나타납니다 당신이 특정 찾고 있다면 원하는 경우 이러한 답변의 대부분은 당신을 말할 것이다 동안 단어 A,하지 문자열 .

차이점이 뭐야? 하위 문자열은 다른 말로 나타날 수 있습니다.

  • “지역”의 시작 부분에있는 “지역”
  • “거기”의 끝에 “있다”
  • “운임”의 중간에 “있다”

이를 완화하는 한 가지 방법은 단어 경계 ( \b) 와 결합 된 정규식을 사용하는 것입니다 .

function containsWord($str, $word)
{
    return !!preg_match('#\\b' . preg_quote($word, '#') . '\\b#i', $str);
}

이 방법에는 위에서 언급 한 것과 같은 오 탐지가 없지만 고유 한 경우가 있습니다. 단어 경계는 단어가 아닌 문자 (에 일치 \W하지 않습니다 아무것도 할 예정), a-z, A-Z, 0-9, 또는 _. 즉, 숫자와 밑줄이 단어 문자로 계산되며 이와 같은 시나리오는 실패합니다.

  • “당신은 무엇을 생각하고 있습니까?”
  • “lol u dunno wut that are are4″의 “are”는 무엇입니까?

이보다 더 정확한 것을 원한다면 영어 구문 구문 분석을 시작해야합니다. 그리고 그것은 꽤 큰 웜 캔입니다 (그리고 항상 주어진 것은 아니지만 구문을 올바르게 사용한다고 가정합니다).


답변

문자열에 다른 문자열이 포함되어 있는지 확인하려면 PHP 함수 strpos ()를 사용할 수 있습니다 .

int strpos ( string $haystack , mixed $needle [, int $offset = 0 ] )

<?php

$haystack = 'how are you';
$needle = 'are';

if (strpos($haystack,$needle) !== false) {
    echo "$haystack contains $needle";
}

?>

주의:

검색중인 바늘이 건초 더미의 시작 부분에 있으면 위치 0을 반환하고 ==작동하지 않는 비교를 수행하면===

==기호 왼쪽 변수 / 표현 / 상수 우측 가변 / 표현 / 상수와 동일한 값을 가지고 있는지를 비교하고 테스트한다.

===기호는 두 변수 / expresions / 상수가 동일한 지 여부를 확인하는 비교입니다 AND같은 유형이 – 즉, 두 문자열 또는 둘 다 정수입니다.


답변

strpos() :

<?php
    $mystring = 'abc';
    $findme   = 'a';
    $pos = strpos($mystring, $findme);

    // Note our use of ===. Simply, == would not work as expected
    // because the position of 'a' was the 0th (first) character.
    if ($pos === false) {
        echo "The string '$findme' was not found in the string '$mystring'.";
    }
    else {
        echo "The string '$findme' was found in the string '$mystring',";
        echo " and exists at position $pos.";
    }
?>

답변

사용 strstr()또는 stristr()검색을해야하는 경우 사례를 구분 또 다른 옵션이 될 것입니다.