リストアイテムと改行のPHP正規表現
"item one"を検索して"AmetElit" を取得するには、正規表現が必要です。または、 "Title" を選択して、 "One statement with \ na linebreak!"
{{- code - 2} code {- code - 2} 1}
したがって、正規表現は {- code - 2}
、いくつかの特定の単語、および{-以降のすべてを検索する必要があります。 code - 3}
。そして、この文字列は、次の {- code - 2}
で改行する前に終了します。
これを試しました
/ [^ {- code - 2} \ s'item one'] {- code - 3} *( 。*)/ g
答え :
解決策:
このパターンで試すことができます:
/^- ([^:]*): (.*(?>\R.*)*?(?=\R- |\R*\z))/m
keyとvalueは、グループ1とグループ2でキャプチャされます。グループ2には、先読みの条件が成功するまで一致する貪欲でない数量詞が含まれています。先読みの(?=...)
は、2番目のグループの後に改行( \R
)が続くか、文字列の終わり()が続くかを確認します。 \z
)
特定のアイテムを入手するには、 ([^:]*)
を好きなものに置き換えます。
答え :
解決策:
この検索機能を使用できます:
function srch($input, $key) {
preg_match('/(?<=\b' . preg_quote($key, '/') . ': ).*?(?=\n-|$)/s', $input, $m);
return $m[0];
}
それを次のように呼びます:
$input = "- item one: Amet Elit
- Title: One sentence with
a line break!
- Desc: Hello and thank you for your help!";
php> echo srch($input, 'Title')
One sentence with
a line break!
php> echo srch($input, 'item one')
Amet Elit
php> echo srch($input, 'Desc')
Hello and thank you for your help!
答え :
解決策:
以下が機能するはずです:
^-\h*([^:\R]*)\h*:\h*(.*$(?:\R[^-].*$)*)
フィドル。
部分的に分割:
-
^-\h*([^:\R]*)\h*
:開始ハイフン(行の先頭で発生する必要があります)からコロンまでの単語に一致し、トリミングされます(\h*
は、キャプチャの外側の水平方向の空白です)。その部分に改行を入れることはできません(\R
) -
\h*(。*)
:行の残りの部分と一致します(左トリミング)。 -
(?: \R[^-]。*$)*
:非キャプチャ((?:
)グループは、ハイフン(\R [^-]
)で始まらないという条件で、後続の0行以上を許可します。PHPの場合:
$ input = "-アイテム1:Amet Elit -タイトル:1文 改行! -説明:こんにちは、あなたの助けに感謝します! "; preg_match_all( "#^-\ s *([^:\R] *)\ s *:\ s *(。* (?:\R[^-]。* $)*)#m "、 $ input、$ matches); foreach($ matches [1] as $ i => $ prefix){ $prefixをエコーします。 "|"。 $ matches [2][$i]。 "
"; }出力:
アイテム1|アメットエリット
タイトル|一文
改行!
説明|こんにちは、あなたの助けに感謝します!
答え :
解決策:
それほど遠くありません。
item one
と完全に一致させるのではなく、単語またはスペースと一致させたいので、 [\w\s]*
^-[\w\s]*:(。*)
の行に沿った何かが機能するはずですが、この情報がどのように入力されるかについては言及していません。検索して置き換えるには? preg_match
?
答え :
解決策:
ポジティブルックビハインドを使用する:
(?<=^- item one: ).*$
フレーズ(上記の例では item one
)が一定でない場合は、 \K
を使用して、一致するものをすべて削除できます。可変長で前向きな後読みを実現するには、これまでのところ:
^-[^:] *:\K。* $
これは、複数の行で一致させるためのわずかな変更です。 gm
フラグ
^-[^:] *:\K(。| \ n)*?(?= ^-| $)
同様の質問
私たちのウェブサイトで同様の質問で答えを見つけてください。