수색…


비고

정규 표현식은 문자열에서 문자열을 가져 오는 것 외에도 문자열을 조각으로 절단하는 것 외에도 다른 용도로 사용해야합니다.

구분 기호로 문자열 분할하기

explodestrstr 은 구분 기호로 하위 문자열을 가져 오는 더 간단한 방법입니다.

공통 문자로 분리 된 텍스트의 여러 부분을 포함하는 문자열은 explode 기능을 사용하여 부분으로 나눌 수 있습니다.

$fruits = "apple,pear,grapefruit,cherry";
print_r(explode(",",$fruits)); // ['apple', 'pear', 'grapefruit', 'cherry']

이 방법은 다음과 같이 사용할 수있는 한계 매개 변수도 지원합니다.

$fruits= 'apple,pear,grapefruit,cherry';

limit 매개 변수가 0이면 1로 처리됩니다.

print_r(explode(',',$fruits,0)); // ['apple,pear,grapefruit,cherry']

limit가 설정되어 있고 양수이면 반환 된 배열에는 나머지 문자열을 포함하는 마지막 요소가있는 최대 제한 요소가 포함됩니다.

print_r(explode(',',$fruits,2)); // ['apple', 'pear,grapefruit,cherry']

limit 매개 변수가 음수이면 last -limit을 제외한 모든 구성 요소가 반환됩니다.

print_r(explode(',',$fruits,-1)); // ['apple', 'pear', 'grapefruit']

explodelist 와 결합하여 문자열을 한 줄로 변수로 파싱 explode 수 있습니다.

$email = "[email protected]";
list($name, $domain) = explode("@", $email);

그러나 explode 결과에 충분한 요소가 포함되어 있는지 확인하거나 정의되지 않은 색인 경고가 트리거되는지 확인하십시오.

strstr 은 지정된 바늘이 처음 strstr 때까지 부분 문자열을 제거하거나 반환합니다.

$string = "1:23:456";
echo json_encode(explode(":", $string)); // ["1","23","456"]
var_dump(strstr($string, ":")); // string(7) ":23:456"

var_dump(strstr($string, ":", true)); // string(1) "1"

strpos를 사용하여 부분 문자열 검색

strpos 는 바늘이 처음 나타날 때까지 건초 더미의 바이트 수로 이해할 수 있습니다.

var_dump(strpos("haystack", "hay")); // int(0)
var_dump(strpos("haystack", "stack")); // int(3)
var_dump(strpos("haystack", "stackoverflow"); // bool(false)

하위 문자열이 있는지 확인 중

TRUE 또는 FALSE를 검사 할 때는주의하십시오. 0의 인덱스가 리턴되면 if 문은 이것을 FALSE로 표시하므로주의하십시오.

$pos = strpos("abcd", "a"); // $pos = 0;
$pos2 = strpos("abcd", "e"); // $pos2 = FALSE;

// Bad example of checking if a needle is found.
if($pos) { // 0 does not match with TRUE.
    echo "1. I found your string\n";
}
else {
    echo "1. I did not found your string\n";
}

// Working example of checking if needle is found.
if($pos !== FALSE) {
    echo "2. I found your string\n";
}
else {
    echo "2. I did not found your string\n";
}

// Checking if a needle is not found
if($pos2 === FALSE) {
    echo "3. I did not found your string\n";
}
else {
    echo "3. I found your string\n";
}

전체 예제의 출력 :

1. I did not found your string 
2. I found your string 
3. I did not found your string 

오프셋에서 검색 시작

// With offset we can search ignoring anything before the offset
$needle = "Hello";
$haystack = "Hello world! Hello World";

$pos = strpos($haystack, $needle, 1); // $pos = 13, not 0

하위 문자열의 모든 항목 가져 오기

$haystack = "a baby, a cat, a donkey, a fish";
$needle = "a ";
$offsets = [];
// start searching from the beginning of the string
for($offset = 0;
        // If our offset is beyond the range of the
        // string, don't search anymore.
        // If this condition is not set, a warning will
        // be triggered if $haystack ends with $needle
        // and $needle is only one byte long.
        $offset < strlen($haystack); ){
    $pos = strpos($haystack, $needle, $offset);
    // we don't have anymore substrings
    if($pos === false) break;
    $offsets[] = $pos;
    // You may want to add strlen($needle) instead,
    // depending on whether you want to count "aaa"
    // as 1 or 2 "aa"s.
    $offset = $pos + 1;
}
echo json_encode($offsets); // [0,8,15,25]

정규식을 사용하여 문자열 구문 분석

preg_match는 정규 표현식을 사용하여 문자열을 구문 분석하는 데 사용할 수 있습니다. 괄호로 묶인 표현의 부분을 하위 패턴이라고하며, 문자열의 개별 부분을 선택할 수 있습니다.

$str = "<a href=\"http://example.org\">My Link</a>";
$pattern = "/<a href=\"(.*)\">(.*)<\/a>/";
$result = preg_match($pattern, $str, $matches);
if($result === 1) {
    // The string matches the expression
    print_r($matches);
} else if($result === 0) {
    // No match
} else {
    // Error occured
}

산출

Array
(
    [0] => <a href="http://example.org">My Link</a>
    [1] => http://example.org
    [2] => My Link
)

하위 문자열

하위 문자열은 start 및 length 매개 변수로 지정된 문자열 부분을 반환합니다.

var_dump(substr("Boo", 1)); // string(2) "oo"

멀티 바이트 문자열을 충족시킬 가능성이 있다면 mb_substr을 사용하는 것이 더 안전합니다.

$cake = "cakeæøå";
var_dump(substr($cake, 0, 5)); // string(5) "cake�"
var_dump(mb_substr($cake, 0, 5, 'UTF-8')); // string(6) "cakeæ"

또 다른 변형은 substr_replace 함수로 문자열의 일부분 내의 텍스트를 대체합니다.

var_dump(substr_replace("Boo", "0", 1, 1)); // string(3) "B0o"
var_dump(substr_Replace("Boo", "ts", strlen("Boo"))); // string(5) "Boots"

문자열에서 특정 단어를 찾고 Regex를 사용하고 싶지 않다고 가정 해 봅시다.

$hi = "Hello World!";
$bye = "Goodbye cruel World!";

var_dump(strpos($hi, " ")); // int(5)
var_dump(strpos($bye, " ")); // int(7)

var_dump(substr($hi, 0, strpos($hi, " "))); // string(5) "Hello"
var_dump(substr($bye, -1 * (strlen($bye) - strpos($bye, " ")))); // string(13) " cruel World!"

// If the casing in the text is not important, then using strtolower helps to compare strings
var_dump(substr($hi, 0, strpos($hi, " ")) == 'hello'); // bool(false)
var_dump(strtolower(substr($hi, 0, strpos($hi, " "))) == 'hello'); // bool(true)

또 다른 옵션은 매우 기본적인 이메일 구문 분석입니다.

$email = "[email protected]";
$wrong = "foobar.co.uk";
$notld = "foo@bar";

$at = strpos($email, "@"); // int(4)
$wat = strpos($wrong, "@"); // bool(false)
$nat = strpos($notld , "@"); // int(3)

$domain = substr($email, $at + 1); // string(11) "example.com"
$womain = substr($wrong, $wat + 1); // string(11) "oobar.co.uk"
$nomain = substr($notld, $nat + 1); // string(3) "bar"

$dot = strpos($domain, "."); // int(7)
$wot = strpos($womain, "."); // int(5)
$not = strpos($nomain, "."); // bool(false)

$tld = substr($domain, $dot + 1); // string(3) "com"
$wld = substr($womain, $wot + 1); // string(5) "co.uk"
$nld = substr($nomain , $not + 1); // string(2) "ar"

// string(25) "[email protected] is valid"
if ($at && $dot) var_dump("$email is valid");
else var_dump("$email is invalid");

// string(21) "foobar.com is invalid"
if ($wat && $wot) var_dump("$wrong is valid");
else var_dump("$wrong is invalid");

// string(18) "foo@bar is invalid"
if ($nat && $not) var_dump("$notld is valid");
else var_dump("$notld is invalid");

// string(27) "foobar.co.uk is an UK email"
if ($tld == "co.uk") var_dump("$email is a UK address");
if ($wld == "co.uk") var_dump("$wrong is a UK address");
if ($nld == "co.uk") var_dump("$notld is a UK address");

아니면 심지어는 "계속 읽기"또는 "..."을 글자 끝에 붙이십시오.

$blurb = "Lorem ipsum dolor sit amet";
$limit = 20;

var_dump(substr($blurb, 0, $limit - 3) . '...'); // string(20) "Lorem ipsum dolor..."


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow