2017-06-23 6 views
0

文字列; RandomValue1:|RandomSentence1.|RandomValue2:|RandomSentence2.|2つの(開始、終了)デリミタ間の文字列に一致するPHP

RandomSentence1.RandomSentence2.と一致させようとしています。私は "。"すべての文がピリオドで終わるので、マッチを助けるために使用することができる。だから私は私の試合で期間がない場合。私はそれで大丈夫です。私はRegExをよく勉強したことはありませんでしたが、私はいつも努力して喜んで学んでいます。ここの結果を通して、私は働くものを思い付くことができませんでした。私はこれをPHPでコーディングしています。 preg_match()またはpreg_split()のどちらかがここでの使用になると思います。

最初に試しました。 .*:\|.*\.\|

しかし、それは.|で終わるので、文字列全体に一致します。

私はこれを試しました。 .*:\|\s*(.*?)\s*\|

しかし、唯一これらは私がオンライン見つけた何のadaptionsあるRandomSentence2.

と一致したことを。

+0

'。*:\ |(。* \。)\ |'にすると、必要なものを選択できますか? –

+0

'preg_match_all( '〜[^ |] * \ | \ K [^ |] *〜'、$ s、$ m)' –

+0

あなたの正規表現を遅延させる必要があるのは '' *?:\ |(。 *?\。)\ | '](https://regex101.com/r/fKqjy5/1) – revo

答えて

1

これは正規表現ですべてをキャプチャする場合に有効です。 NOT .または.|続い|を探してください:

preg_match_all('/([^.|]+\.)\|/', $string, $matches); 
print_r($matches[1]); 

代替あなたが他のエントリで何かをしたい場合は分割して、あなたが欲しいものを見つけることであろう。その後、.で終わる配列の値をgrep |で分割:あなたはすでに終わりにドットがある知っているので

$matches = preg_grep('/\.$/', explode('|', $string)); 
+0

Revoのコメントとあなたの投稿はどちらも答えます。私は正規表現の構文を研究し、それがどのようにそれを達成したかを学ばなければならないでしょう。ありがとうございました! – Klownicle

1

は、あなただけの単純なもので、すべての
を一致させることができます(?<=\|)[^|.]+(?=\.\|)

https://regex101.com/r/ZsHcWq/1

(?<= \|) 
[^|.]+ 
(?= \.\|) 
関連する問題