2010-12-14 7 views
1

私はテキストのセクションのスマートな抜粋を取得したいと思います。 Movable Typeのregex_replace関数を使用しているので、最初の数文の後にすべてを取得しようとしています。すべての*の正規表現*最初の完全な文(ピリオドとスペース)*後* N文字

\..*は最初の期間の後にすべてを取得しますが、それはしばしば短すぎる抜粋を残します。最初の100文字をスキップしても、同じことを(最初の期間の後のすべて)どのように行うことができますか?

また、2番目または3番目の期間の後に、どうすればすべてを取得できますか? regex_replaceに精通していない

答えて

0

、私はPHP preg_replace機能を使用しますし、あなたがそれに応じて適応することができます。

$truncated = preg_replace('/^(.{100}.*?\.).*$/s', '$1', $long); 

編集:私は、構文は全体の事などを処理する出力にハイライト表示してアップだかわかりません文字列、それはプレビューでは正常に見えます。

と小数点と数字を壊すない程度スマートにしようとする別のバージョン、(または他の場所期間の文の終わり以外のどこかに発生する可能性があります):

$truncated = preg_replace('/^(.{100}.*?\.(?![a-z0-9])).*$/s', '$1', $long); 

説明:

  1. 保存したい部分は括弧でグループ化されています。
  2. あなたは少なくとも100文字おこう:あなたは、最初の小数点までの任意の次の文字をしておこう.{100}
  3. を:​​
  4. 番目のバージョンでは、私は-which意志負lookahead- (?![a-z0-9])を使用期間文字の後に数字または文字が続く場合は、最後の部分を次の小数点以下の桁まで続けます。
  5. ドットは改行(パターンの末尾にあるs修飾子)と一致します。 Movable Typeのregex_replace関数がデリミタなしのパターン(先行スラッシュと私のパターンの末尾に/s)を取る場合は、代わりに(?s)をパターンの先頭に使用することができます。
  6. 置換された最初のグループを維持するために、置換で$1を使用してください。
0

完全な文はあいまいです。異なる言語では、文末をエンコードする方法が異なります。ある期間の後のスペースがEOSであるとしましょう: /^.*?\.\s+(?:.{N})(.*)/ Nを希望の数に置き換えます。

関連する問題