0

大きなブロックから必要なテキストの特定の部分を取得する方法を正確に理解できないようです。メールの解析中に、通常のテキスト ブロックで : と ( の間の文字列を取得できるようにする必要があります。例を以下に示します。preg_match について少し知っていて、それが答えだと思いましたが、そうは思えません。こことGoogleの検索では何も出てこなかったので、助けていただければ幸いです。

GC3J26Pの場合:ワイズレイクⅡ(トラディショナル)

: と最初のかっこの間のテキストだけが必要です。助けてくれてありがとう。

4

3 に答える 3

3

あなたは試してみたがうまくいかなかったと言っているので、これを試してください:

$str = "For GC3J26P: Wise Lake II (Traditional)";
preg_match('/(?<=:).*(?=\()/', $str, $str);
if ($str) echo $str[0];

暗く、しかし美しい REGEX の世界に慣れていない場合は、ここで何が起こっているのか説明させてください。

それはすべてパターンについてです。私たちのパターンは、一致するもの、つまりキャプチャで受け入れられるものと受け入れられないものを定義します。

それ以上に、それは私たちの試合の直前に何をすべきかを述べています。これらは、それぞれ後読みアサーションおよび先読みアサーションと呼ばれます。これらのアサーションは、一致するポイントのアンカーです。キャプチャされた一致自体には寄与しません。

したがって、パターンは次のように変換されます。

1) コロンの後に一致を開始します (ただし、一致にコロンを含めないでください)

2) 次に、任意の文字 (改行やその他の特定の特殊文字を除く) を 0 回以上許可してキャプチャします。

3) 開き括弧まで (ただし含まず) 一致する

私たちのパターンは貪欲と呼ばれるものです。私たちの場合、これは、一致させたい部分文字列自体にコロンまたはブラケットが含まれている場合、これは問題ではなく、問題が発生しないことを意味します。SOME コロンから SOME 開始ブラケットまで有効な一致が利用可能である限り、すべて問題ありません。(注: 貪欲な動作は、必要に応じて変更できます)。

REGEX には、はるかに多くの機能があり、好きでも嫌いでもあります。興味があれば、一読することをお勧めします。入った時の満足度は高いです。

そして、就寝時間です。

于 2012-07-07T23:11:33.493 に答える
0

これを試すことができます:

$string = 'For GC3J26P: Wise Lake II (Traditional)'; 

preg_match('/\:(.*?)\(/', $string, $matches); 

echo $matches[0]; // : Wise Lake II (
echo $matches[1]; // Wise Lake II
于 2012-07-07T23:25:07.397 に答える
0

ここにあります:「名前付きサブパターン」を使用しました(「名前」と名付けましたが、ほとんど何でも呼び出すことができます...

$str="For GC3J26P: Wise Lake II (Traditional)";
preg_match('/:(?P<name>[\S\s]+)\(/', $str, $matches);
echo $matches["name"];
于 2012-07-07T23:36:10.510 に答える