ホームページ バックエンド開発 PHPチュートリアル 正規表現を使用して、指定された開始位置のソース文字列から固定長の文字列をインターセプトする_PHP チュートリアル

正規表現を使用して、指定された開始位置のソース文字列から固定長の文字列をインターセプトする_PHP チュートリアル

Jul 13, 2016 pm 04:58 PM
コード 位置 存在する インターセプト 指定 通常 ソース 使用 始める

[コード]正規表現を使用して、ソース文字列(中国語を含む)から指定された開始位置から固定長文字列をインターセプトします[第4版]
[コード] 通常のルールを使用して、指定された開始位置から始まるソース文字列から特定の長さの文字列をインターセプトします [第 4 版]
【コード】正規表現を使って、指定した開始位置からソース文字列から一定の長さの文字列をインターセプトする【第四改訂】
【コード】正規表現を使ってソース文字列から一定バイト長の文字列を先頭から切り出します
【コード】正規表現を使用して、指定された開始位置から始まるソース文字列から一定の長さの文字列をインターセプトします

(ところで: 中国語のエンコーディングは非常に複雑で、やや不合理です。上位ビットは 0xa1 ~ 0xfe (255 である 0xff は Telnet プロトコルで重要な役割を果たすため、0xff を除く)、下位ビットは 0x40 ~ 0xfe です。GBK上位ビットを 0x81-0xfe に拡張しました


最後のバイトが間違った中国語でインターセプトされるかどうかについての説明:
漢字の半分がインターセプトされた場合、最後のバイトは上位バイトである必要があり、その ASCII コードは 0x81 より大きくなります。
中国語の上位バイトは 0x81 より大きいですが、下位バイトには制限がないためです。
完全な漢字: [0x81-0xfe][0x40-0xfe]
したがって、正規表現を使用して、中国語と中国語以外の文字を順番に抽出します。中国語が優先されます。
最後のバイト、漢字の半分が傍受されると、それは非漢字となり、漢字の上位バイトになります
そして、このバイトが[0x81-0xfe]にあるかどうかを判断することで、インターセプトが間違っているかどうかを知ることができます。

<?php

//------------------------------------------------ ---------------
// ファイル名:preg_substr.php
// 説明: 正規表現を使用して、指定された開始位置から始まるソース文字列から一定量の文字列をインターセプトします
//------------------------------------------------ ----------

/// 関数の説明
/// 関数名: preg_substr
/// 関数バージョン: 4 番目のリビジョン
/// 関数: 正規表現を使用して、指定された開始位置から始まるソース文字列からある程度の文字列をインターセプトします
/// 関数パラメータ:
/// $strSource : ソース文字列
/// $intStart: 開始位置、デフォルトは 0 で、最初から開始することを意味します
/// $intLen: 切片の長さ、デフォルトは 32 です

関数 preg_substr($strSource, $intStart=0, $intLen=32)
{
is_int($intLen) ?0:die("len は整数ではありません");
is_int($intStart) ?0:die("開始値が整数ではありません");
if ($intStart>=0 && $intLen>0 && @preg_match('/^(.{'.$intStart.'})(.{0,'.$intLen.'})/si', $strSource) ){
@preg_match('/^(.{'.$intStart.'})(.{0,'.$intLen.'})/si', $strSource, $regs);
@preg_match_all('/([x81-xFE].|.)/sim', $regs[1], $regs1, PREG_PATTERN_ORDER);
@preg_match('/^[x81-xFE]$/',$regs1[1][count($regs1[1])-1])?$intStart--:0;

@preg_match('/^(.{'.$intStart.'})(.{0,'.$intLen.'})/si', $strSource, $regs);
@preg_match_all('/([x81-xFE].|.)/sim', $regs[2], $regs1, PREG_PATTERN_ORDER);
@preg_match('/^[x81-xFE]$/',$regs1[1][count($regs1[1])-1])?$intLen--:0;

@preg_match('/^(.{'.$intStart.'})(.{0,'.$intLen.'})/si', $strSource, $regs);

$strResult = $regs[2];
}その他{
$strResult = "";
}
$strResult を返します;
}

関数 preg_substr2($strSource, $intStart=0, $intLen=32)
{
is_int($intLen) ?0:die("len は整数ではありません");
is_int($intStart) ?0:die("開始値が整数ではありません");
if ($intStart>=0 && $intLen>=0)
{
$strResult = substr($strSource, 0, $intStart);
@preg_match_all('/([x81-xFE].|.)/sim', $strResult, $regs, PREG_PATTERN_ORDER);
if(@preg_match('/^[x81-xFE]$/',$regs[1][count($regs[1])-1], $regs)){
$intStart--;
}

$strResult = substr($strSource, $intStart, $intLen);
@preg_match_all('/([x81-xFE].|.)/sim', $strResult, $regs, PREG_PATTERN_ORDER);
if(@preg_match('/^[x81-xFE]$/',$regs[1][count($regs[1])-1], $regs)){
$strResult = substr($strSource, $intStart, --$intLen);
}
}
$strResult を返します;
}

$strHTML = <<<HTML
腹部

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/631416.html技術記事 [コード] 正規表現を使用して、ソース文字列 (中国語を含む) から指定された開始位置から固定長文字列をインターセプトします。 [第 4 版] [コード] 正規表現を使用して、ソース文字列 (中国語を含む) から指定された開始位置から固定長文字列をインターセプトします。指定された開始位置...
からの抜粋
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Kuaishou はどこで公開されていますか?またその場所を変更するにはどうすればよいですか?アップロードされたビデオに位置情報を追加するにはどうすればよいですか? Kuaishou はどこで公開されていますか?またその場所を変更するにはどうすればよいですか?アップロードされたビデオに位置情報を追加するにはどうすればよいですか? Mar 21, 2024 pm 06:00 PM

Kuaishou はどこで公開されていますか?またその場所を変更するにはどうすればよいですか?アップロードされたビデオに位置情報を追加するにはどうすればよいですか?

スタードーム鉄道クロッカー映画テレビパークの折り紙鳥の場所 スタードーム鉄道クロッカー映画テレビパークの折り紙鳥の場所 Mar 27, 2024 pm 11:51 PM

スタードーム鉄道クロッカー映画テレビパークの折り紙鳥の場所

Meituan Daily Voucherの場所はどこですか_Meituan Daily Voucherの場所の紹介 Meituan Daily Voucherの場所はどこですか_Meituan Daily Voucherの場所の紹介 Mar 27, 2024 pm 05:11 PM

Meituan Daily Voucherの場所はどこですか_Meituan Daily Voucherの場所の紹介

PHPでint型をstringに変換する方法を詳しく解説 PHPでint型をstringに変換する方法を詳しく解説 Mar 26, 2024 am 11:45 AM

PHPでint型をstringに変換する方法を詳しく解説

Golang 正規表現を使用して複数の単語または文字列を照合するにはどうすればよいですか? Golang 正規表現を使用して複数の単語または文字列を照合するにはどうすればよいですか? May 31, 2024 am 10:32 AM

Golang 正規表現を使用して複数の単語または文字列を照合するにはどうすればよいですか?

Golang 文字列が指定された文字で終わるかどうかを判断する方法 Golang 文字列が指定された文字で終わるかどうかを判断する方法 Mar 12, 2024 pm 04:48 PM

Golang 文字列が指定された文字で終わるかどうかを判断する方法

Golang で文字列が特定の文字で始まるかどうかを確認するにはどうすればよいですか? Golang で文字列が特定の文字で始まるかどうかを確認するにはどうすればよいですか? Mar 12, 2024 pm 09:42 PM

Golang で文字列が特定の文字で始まるかどうかを確認するにはどうすればよいですか?

python_python の繰り返し文字列チュートリアルで文字列を繰り返す方法 python_python の繰り返し文字列チュートリアルで文字列を繰り返す方法 Apr 02, 2024 pm 03:58 PM

python_python の繰り返し文字列チュートリアルで文字列を繰り返す方法

See all articles