Hướng dẫn how do i search for a specific character in a string in php? - làm cách nào để tìm kiếm một ký tự cụ thể trong một chuỗi trong php?

Bạn có thể sử dụng các biểu thức thông thường vì nó tốt hơn để khớp từ so với strpos, như được đề cập bởi những người dùng khác. Kiểm tra strpos cho are cũng sẽ trả về đúng cho các chuỗi như: giá vé, chăm sóc, nhìn chằm chằm, v.v ... Những trận đấu ngoài ý muốn này có thể tránh được trong biểu thức thông thường bằng cách sử dụng ranh giới từ.

Một trận đấu đơn giản cho are có thể trông giống như thế này:

$a = 'How are you?';

if [preg_match['/\bare\b/', $a]] {
    echo 'true';
}

Về mặt hiệu suất, strpos nhanh hơn khoảng ba lần. Khi tôi thực hiện một triệu so sánh cùng một lúc, phải mất 1,5 giây để kết thúc và với strpos phải mất 0,5 giây.

Chỉnh sửa: Để tìm kiếm bất kỳ phần nào của chuỗi, không chỉ từng từ, tôi khuyên bạn nên sử dụng một biểu thức thông thường như

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

$a = 'How are you?';
$search = 'are y';
if[preg_match["/{$search}/i", $a]] {
    echo 'true';
}
4 ở cuối biểu thức chính quy thay đổi biểu thức chính quy là không nhạy cảm với trường hợp, nếu bạn không muốn điều đó, bạn có thể bỏ nó ra.

Bây giờ, điều này có thể khá có vấn đề trong một số trường hợp vì chuỗi tìm kiếm $ không được khử trùng theo bất kỳ cách nào, ý tôi là, nó có thể không vượt qua kiểm tra trong một số trường hợp như thể

$a = 'How are you?';
$search = 'are y';
if[preg_match["/{$search}/i", $a]] {
    echo 'true';
}
5 là đầu vào của người dùng, họ có thể thêm một số chuỗi có thể hoạt động Giống như một số biểu thức chính quy khác nhau ...

Ngoài ra, đây là một công cụ tuyệt vời để thử nghiệm và xem các giải thích về các biểu thức thường xuyên khác nhau Regex101

Để kết hợp cả hai bộ chức năng thành một hàm đa năng duy nhất [bao gồm cả độ nhạy trường hợp có thể lựa chọn], bạn có thể sử dụng một cái gì đó như thế này:

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.
}

Một điều nữa cần lưu ý là

$a = 'How are you?';
$search = 'are y';
if[preg_match["/{$search}/i", $a]] {
    echo 'true';
}
6 sẽ không hoạt động bằng các ngôn ngữ khác nhau ngoài tiếng Anh.

Giải thích cho điều này và giải pháp được lấy từ đây:

$a = 'How are you?';
$search = 'are y';
if[preg_match["/{$search}/i", $a]] {
    echo 'true';
}
6 đại diện cho phần đầu hoặc đầu của một từ [ranh giới từ]. Regex này sẽ phù hợp với Apple trong một chiếc bánh táo, nhưng sẽ phù hợp với Apple trong dứa, Applecarts hoặc BakeApples.

Làm thế nào về Café Café? Làm thế nào chúng ta có thể trích xuất từ ​​"Café Café" trong Regex? Trên thực tế, \ bcafé \ b sẽ làm việc. Tại sao? Bởi vì Café Café có chứa nhân vật không phải ASCII: é. \ B có thể được sử dụng một cách đơn giản với unicode như समुद र,, мес và.

Khi bạn muốn trích xuất các ký tự Unicode, bạn nên xác định trực tiếp các ký tự đại diện cho các ranh giới từ.

Câu trả lời:

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

Vì vậy, để sử dụng câu trả lời trong PHP, bạn có thể sử dụng chức năng này:

function contains[$str, array $arr] {
    // Works in Hebrew and any other unicode characters
    // Thanks //medium.com/@shiba1014/regex-word-boundaries-with-unicode-207794f6e7ed
    // Thanks //www.phpliveregex.com/
    if [preg_match['/[?

Bài Viết Liên Quan

Chủ Đề