4

PHPを使用して文字列の部分文字列をコピーしたい。

最初のパターンの正規表現は/\d\|\d\w0:/

2番目のパターンの正規表現は/\d\w\w\d+:\s-\s:/

と組み合わせpreg_matchstrpos、最初から最後まで正確な位置を取得し、それを次のようにコピーすることは可能ですか?

substr( $string, $firstPos,$secPos ) ?
4

4 に答える 4

4

よくわかりませんが、次のようにpreg_splitを使用できます。

$mysubtext = preg_split("/\d\|\d\w0:/", $mytext);

$mysubtext = preg_split("/\d\w\w\d+:\s-\s:/", $mysubtext[1]);

$mysubtext = $mysubtext[0];
于 2010-06-16T08:33:24.200 に答える
4

の4番目のパラメーターを使用する場合は、フラグをpreg_match()設定して、関数が一致した文字列のオフセットを返すようにすることもできます。したがって、とPREG_OFFSET_CAPTUREを組み合わせる必要はありません。preg_match()strpos()

http://php.net/manual/function.preg-match.php

于 2010-06-16T08:36:33.093 に答える
3

もちろん。

または、パターンを組み合わせて、パターン間のコンテンツに一致する新しい超素晴らしい魔法のパターンにすることもできます(接頭辞は一致した部分文字列の直前にあり、接尾辞はその直後にあると主張します)。

$prefix = '\d|\d\w0:';
$suffix = '\d\w\w\d+:\s-\s:';
if (preg_match("/(?<=$prefix).*?(?=$suffix)/", $subject, $match)) {
    $substring = $match[0];
}

(余談ですが、部分文字列が複数行にまたがる場合は、s修飾子または以外のものを使用することをお勧めします。).

于 2010-06-16T08:34:57.333 に答える
0

preg_matchの3番目の引数は、キャプチャ、つまり一致した実際の文字列を収集する出力パラメータです。あなたのstrposを養うためにそれらを使用してください。Strposは正規表現を受け入れませんが、キャプチャには、文字列に含まれている実際に一致したテキストが含まれます。キャプチャを行うには、括弧を使用します。

たとえば(試したことはありませんが、アイデアを得るためです):

$str = 'aaabbbaaa';
preg_match('/(b+)/', $str, $regs );
// now, $regs[0] holds the entire string, while $regs[1] holds the first group, i.e. 'bbb'
// now feed $regs[1] to strpos, to find its position
于 2010-06-16T08:28:43.440 に答える