0

私は正規表現を持っています

/h.*e.*l.*l.*o.*/i

そして、私はそれが実行されている私の段落を持っています。

Hey look at that lion!

結果は次のとおりです。

answer[0] = Hey look at that lion!
answer[1] = H
answer[2] = e
answer[3] = l
answer[4] = l
answer[5] = o

私はこのような結果を得ることができるかどうか疑問に思っていました:

answer[0] = Hey look at that lion!
answer[1] = Hello

正規表現を変更するだけです。たぶんグループ化か何かを使用していますか?そして、その質問に対する答えが「いいえ」の場合、他の選択肢は何ですか?私は本当に答えをループしてそれをつなぎ合わせたくありませんが、それが唯一の方法であるなら、私は私が思うようにそれをします。

4

3 に答える 3

1

あなたの表現は素晴らしいです。あなたはそれを一度実行し、1つの一致を返すだけです。それはいいです。

参考のためにここを見てください:http://regex101.com/r/jU3zU2

必要に応じて、例のように後方参照を使用してデータ全体を取得できます。

ただし、正規表現にある「こんにちは」を返したいのですが...そうですね..何ですか?

于 2012-08-27T17:36:03.383 に答える
0
array_shift($answer);
$answer = implode('',$answer);

array_shiftは、結果の配列から文字列全体を含む要素を削除し、次にimplodeがそれらをすべて1つの文字列にまとめます。

于 2012-08-27T17:35:53.460 に答える
0

これは、正規表現を使用しては不可能です。正規表現を使用する際の変更できないルールの1つは、すべての文字を1回だけ一致させることができるということです。つまり、文全体その中の一部を返すことはできません。

例:

"abc".match(/a|b|c|(abc)/g)

最後のabcグループは一致しますが、abcの文字が以前の式と一致するため、一致することはありません。a|b|c

正規表現内で結果を基本的にハードコーディングすることで何を達成したいのかわかりません。実際のコードは別のことを行う必要があると思います。そうでない場合は、変数に「hello」を割り当てるだけです。

于 2012-08-27T18:12:28.923 に答える