正規表現中国語マッチング問題

WBOY
リリース: 2016-06-20 12:31:04
オリジナル
956 人が閲覧しました

次の式の「サンプルページ」を照合して結果を読み出すにはどうすればよいですか?現在、読み取り値が文字化けしています。

<?phpheader("Content-Type:text/html;charset=utf-8"); $subject="世界,您好!示例页面safdasfdasfdsafaf0808080势";$pattern='/[示例页面42424242432def42242342示例页面dsadfa]/';preg_match($pattern,$subject,$matches);echo $matches[0];?>
ログイン後にコピー


ディスカッションへの返信 (解決策) )

どういう意味ですか?サンプルページが一致したら、直接書き込むだけです。
$pattern='/サンプル ページ/';

$pattern='/[サンプル ページ 42424242432def42242342 サンプル ページ dsadfa]/ u';

それはどういう意味ですか?サンプルページに合わせてそのまま書き込むだけです。
$pattern='/Sample Page/';



プロジェクト内の他の漢字内に「Sample Page」のような文字列が存在するためです。

$pattern='/[サンプル ページ 42424242432def42242342 サンプル ページ dsadfa]/ u';



モデレーター様、ご返信ありがとうございます。ただし、u を追加すると " " 文字のみに一致しました。

はい!これは、あなたが行うことです
1. 角括弧は文字のリストであり、一致するのは 1 文字です
u の変更は、utf-8 の中国語文字を文字として扱うことです
2. preg_match のみを受け取ります。最初の A セットの一致結果、preg_match_all はすべての一致の結果です

はい!これは、あなたが行うことです
1. 角括弧は文字のリストであり、一致するのは 1 文字です
u の変更は、utf-8 の中国語文字を文字として扱うことです
2. preg_match のみを受け取ります。最初の一致結果のセット、preg_match_all はすべての一致結果を取得するために使用されます


では、どのようにして「サンプル ページ」を一致させることができるのでしょうか?

はい!これは、あなたが行うことです
1. 角括弧は文字のリストであり、一致するのは 1 文字です
u の変更は、utf-8 の中国語文字を文字として扱うことです
2. preg_match のみを受け取ります。最初の一致結果のセット、preg_match_all はすべての一致の結果です



これは preg match all の結果ですが、まだ機能しません

array(1) { [0]=> 配列(21) { [0]=> 文字列(3) "例" [2]=> 文字列(3) " [3]=> string(3) "面" [4]=> string(1) "s" [5]=> string(1) "a" [6]=> string(1) "f" [7] => 文字列 (1) "d" => 文字列 (1) "s" => 文字列( 1) "f" [ 11]=> 文字列(1) "d" [12]=> 文字列(1) "s" [14]=>文字列(1) "f" [15]=> 文字列(1) "d" [16]=> 文字列(1) "a" [18]= > string(1) "f" [19]=> string(1) "a" [20]=> string(1) "f" } }

サンプルページ
次に、単に $pattern='/sample page/';

フレーズに一致させたい場合は、 サンプルページ
次に、単純な $pattern ='/Sample Page/';


問題は、実際のプロジェクトでは、この「サンプル ページ」が単独で表示されるのではなく、オブジェクト配列の結果であることです。 「サンプル ページ」 (「サンプル ページ 1」、「サンプル ページ 2」など) のような多くの文字列をまとめて、 $subject="Hello, world! サンプル ページ safdasfdasfdsafaf0808080potential"; と組み合わせて使用​​します。 $subject に「サンプル ページ」、「サンプル ページ 1」、「サンプル ページ 2」などのいずれかが含まれているかどうかを確認します。TRUE が返された場合、一致した結果は他の用途のために取り出されます。

それは何ですか?
それはあなたが望むものではありませんか?

$subject = "世界,您好!示例页面safdasfdasfdsafaf0808080势";$pattern = '/示例页面/';if(preg_match($pattern, $subject)) echo '包含';
ログイン後にコピー

または

$subject = "世界,您好!示例页面safdasfdasfdsafaf0808080势";$pattern = '/示例页面.+/';if(preg_match($pattern, $subject, $matches)) {  echo ,$matches[0];}
ログイン後にコピー
ログイン後にコピー

または

$subject = "世界,您好!示例页面safdasfdasfdsafaf0808080势";$pattern = '/示例页面.+/';if(preg_match($pattern, $subject, $matches)) {  echo ,$matches[0];}
ログイン後にコピー
ログイン後にコピー



いいえ、それだけです:

$subject="世界,您好!示例页面safdasfdasfdsafaf0808080势";$pattern='/[示例页面42424242432def42242342示例页面dsadfa]/';preg_match($pattern,$subject,$matches);if (preg_match){echo '成功';}
ログイン後にコピー

または、次のように見てください:

$subject="世界,您好!示例页面safdasfdasfdsafaf0808080势";$pattern='/[示例页面424世界,您好24242432de势f42242342示例页面dsadfa]/';preg_match($pattern,$subject,$matches);if (preg_match){echo '成功'.'$matches[0]'.'$matches[1]','$matches[2]'}//$matches[0]应该输出示例页面,$matches[1]应该输出世界,您好,$matches[2]输出势
ログイン後にコピー

それは不可能です!

それは不可能です!


ああ、つまり、/[サンプル ページ 424world、hello24242432deshif42242342サンプル ページ dsadfa]/ を分離する方法を見つけて、それらを 1 つずつ取得する必要があるということですね。

それは不可能です!



正则用不了,那下面的情况怎么实现,求版主给个思路;

假设有个数组$A,里面放了38组数据,如何一次性随机取出38个值 ?
如下代码所示:

            //首先调出数据库中的title            $linktitle=$wpdb->get_results("SELECT post_title FROM $wpdb->posts WHERE post_status = 'publish'");            $nums=rand(1,38);            $post_title=$linktitle[$nums]->post_title;//里面有38个值            if ($post_title){                        //如果这38个值里有任意一个在文章中出现,则执行以下函数操作            $replace = array(                   $post_title => '<a href="http://host-7:8888/wiki/'.$post_title.'" >'.$post_title.'</a>',               );             $text = str_replace(array_keys($replace), $replace, $text);}                                      return $text; 
ログイン後にコピー

你是要做关键次匹配?

你是要做关键次匹配?



大概是这样的意思,在文章中找到所有包含在$linktitle中的关键词,然后再运行替换。

$pattern = "/世界,您好|示例页面|势/";
拼接这样的字符串,应该不是难事吧?

$pattern = "/世界,您好|示例页面|势/";
拼接这样的字符串,应该不是难事吧?



少了可以这样人工拼接,但实际情况会有上万个。。。。

少时,也不是人工拼接,而是用 join 连接数组元素为字符串
多时,就要改还思路:不是检查关键词是否包含在内容中,而是检查内容中含有那些关键词
这个用 trie 树就轻松搞定(精华区中有)

少时,也不是人工拼接,而是用 join 连接数组元素为字符串
多时,就要改还思路:不是检查关键词是否包含在内容中,而是检查内容中含有那些关键词
这个用 trie 树就轻松搞定(精华区中有)



成功了,不过没用你说的那个,是这样写的:

$linktitle=$wpdb->get_results("SELECT post_title FROM $wpdb->posts WHERE post_status = 'publish'");            // //遍历KEY             $i=0;             while($i<38){                            $pattern[$i]='/'.$linktitle[$i]->post_title.'/';              $replace[$i]='this is replace result';              $i++;              }            $content=preg_replace($pattern, $replace, $content)            return $content;
ログイン後にコピー

我这个也是正则表达式,是不是一样的啊,代码太多就不打了。http://www.manonggu.com/biancheng/391 

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート