cuốn sách gpt4 ai đã làm

Đối sánh biểu thức chính quy PHP tương tự như các chữ cái. Còn được gọi là u=ü hoặc ê=é=è=e

In lại Tác giả: Hồ Xil Thời gian cập nhật: 2023-10-31 23:10:40 27 4
mua khóa gpt4 Nike

Tôi đang tìm cách tìm kiếm các từ cụ thể trong văn bản và đánh dấu chúng. Mã hoạt động hoàn hảo ngoại trừ việc tôi muốn nó khớp với các chữ cái tương tự. Ý tôi là, tìm kiếm fête phải phù hợp với fêté, fete,...

Có cách nào đơn giản và thanh lịch để thực hiện việc này không?

Đây là mã hiện tại của tôi:

$regex='/(' . preg_replace('/\s+/', '|', preg_quote($usersearchstring)) .')/iu';

$higlightedtext = preg_replace($regex, '\0', $text);

Văn bản của tôi không được mã hóa html. Tìm kiếm MariaDB để có kết quả tương tự.

[EDIT] Đây là một ví dụ dài hơn về câu hỏi:

$usersearchstring='fête';
$text='la paix fêtée avec plus de 40 culture';
$regex='/(' . preg_replace('/\s+/', '|', preg_quote($usersearchstring)) .')/iu';
$higlightedtext = preg_replace($regex, '\0', $text);

Kết quả là $higlightedtext giống với $text

Khi $higlightedtext từ "fêté" được thay đổi, $higlightedtext sẽ là

'la paix fêtée avec plus de 40 culture'

Tuy nhiên, tôi muốn nó "luôn luôn" khớp với tất cả các biến thể của chữ cái, vì có thể có (và trên thực tế có thể có) nhiều biến thể của từ này. Chúng tôi có fête fêté trong cơ sở dữ liệu, thậm chí có thể là fêté.

Tôi đã suy nghĩ về điều này, nhưng giải pháp duy nhất tôi thấy là có một mảng lớn với tất cả các tùy chọn thay thế chữ cái, sau đó lặp qua chúng và thử từng biến thể. Nhưng điều này không thanh lịch và sẽ chậm. (Vì đối với nhiều chữ cái tôi có ít nhất 5 biến thể: aáàâä, hóa ra nếu từ đó có 3 nguyên âm, tôi cần phải thực hiện 75x (5x5x5) preg_replace.

[/biên tập]

câu trả lời hay nhất

Câu hỏi của bạn là vềngăn nắp, nghệ thuật xử lý văn bản ngôn ngữ tự nhiên để sắp xếp và so sánh nó bằng cách sử dụng kiến ​​thức về các quy tắc từ vựng của ngôn ngữ. Bạn đang tìm kiếm một đối chiếu không phân biệt chữ hoa chữ thường và không phân biệt dấu phụ.

Nguyên tắc phân loại phổ biến là Bhiện hữu MỘT sau đó . Một quy tắc ít phổ biến hơn nhưng quan trọng đối với vấn đề của bạn là êelà tương đương. Việc phân loại chứa nhiều quy tắc như vậy, được xây dựng cẩn thận trong nhiều năm. Nếu bạn đang sử dụng cách đối chiếu không phân biệt chữ hoa chữ thường, bạn sẽ cần một cái gì đó như Một Những quy định như vậy và MỘTlà tương đương.

Các quy tắc dấu phụ cho hầu hết các ngôn ngữ châu Âu (trừ tiếng Tây Ban Nha) là: NNlà tương đương. Trong tiếng Tây Ban Nha, Nhiện hữu N sau đó.

Cơ sở dữ liệu hiện đại nhận thức được những đối chiếu này. Ví dụ: nếu bạn sử dụng MySQL, bạn có thể đặt mã hóa ký tự thành utf8mb4 của các cột. Và utf8mb4_unicode_ci đối chiếu. Điều này hoạt động tốt với hầu hết các ngôn ngữ (nhưng không hoàn hảo cho tiếng Tây Ban Nha).

Công nghệ Regex không hữu ích lắm cho việc hoàn thiện công việc. Nếu bạn sử dụng biểu thức thông thường cho việc này thì bạn đang cố gắng phát minh lại bánh xe và rất có thể bạn đang phát minh lại chiếc lốp bị xẹp.

PHP, giống như hầu hết các ngôn ngữ lập trình hiện đại, bao gồm hỗ trợ sắp xếp được tích hợp trong Lớp đối chiếu ở giữa. .Đây là một ví dụ đơn giản về cách sử dụng đối tượng Collator cho trường hợp sử dụng ký tự có dấu. nó sử dụng Collator::Sức mạnh đối chiếu CHÍNHThực hiện so sánh không phân biệt chữ hoa chữ thường và dấu trọng âm.

mb_internal_encoding("UTF-8");
$collator = collator_create('fr_FR');
$collator->setStrength(Collator::PRIMARY);
$str1 = mb_convert_encoding('fêté', 'UTF-8');
$str2 = mb_convert_encoding('fete', 'UTF-8');
$result = $collator->compare($str1, $str2);
kết quả echo $;

kết quả $Đây là số 0, nghĩa là các chuỗi bằng nhau. Đây là những gì bạn muốn.

Nếu bạn muốn tìm kiếm chuỗi con phù hợp trong một chuỗi theo cách này, bạn sẽ cần sử dụng tính năng khớp chuỗi con rõ ràng để thực hiện việc này. Công nghệ biểu thức chính quy không cung cấp điều này.

Đây là chức năng thực hiện tìm kiếm và chú thích (ví dụ: thêm Nhãn). Nó tận dụng tối đa sơ đồ bình đẳng ký tự của lớp Collator.

hàm annotate_ci ($haystack, $needle, $prefix, $suffix, $locale="FR-fr") {

$restoreEncoding = mb_internal_encoding();
mb_internal_encoding("UTF-8");
$len = mb_strlen($needle);
if (mb_strlen( $haystack ) < $len ) {
mb_internal_encoding($restoreEncoding);
trả về $haystack;
}
$collator = collator_create( $locale );
$collator->setStrength( Collator::PRIMARY );

$kết quả = "";
$vẫn = $haystack;
trong khi ( mb_strlen( $remain ) >= $len ) {
$matchStr = mb_substr($remain, 0, $len);
$match = $collator->compare( $needle, $matchStr );
nếu ( $match == 0 ) {
/* thêm chuỗi $needle phù hợp vào kết quả, kèm theo chú thích.
* lấy chuỗi khớp từ $remain
*/
$result .= $prefix .
$remain = mb_substr( $remain, $len );
} khác {
/* thêm một ký tự vào $result, lấy một ký tự từ $remain */
$result .= mb_substr( $remain, 0, 1 );
$remain = mb_substr( $remain, 1 );
}
}
$result .= $remain;
mb_internal_encoding($restoreEncoding);
trả về kết quả $;
}

Dưới đây là một ví dụ về cách sử dụng chức năng này.

$needle = 'Fete'; /* không có dấu phụ ở đây!
$haystack= mb_convert_encoding('avec cộng với 40 nền văn hóa', 'UTF-8');

$kết quả = annotate_ci($haystack, $needle,
'' , '');

nó trả lại

 la paix fêtée avec plus de 40 culture

Về việc kết hợp biểu thức chính quy trong php cũng tương tự như các chữ cái. Còn được gọi là u=ü hoặc ê=é=è=e, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/40436672/

27 4 0
Hồ Xil
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress