1

以下のような例があります。必要なのは、特定の行のタイミング部分を削除することです。たとえば、次のようになります。

UEFA ヨーロッパリーグ サイマルキャスト 8.00am-10.00am

私だけが必要です:

UEFAヨーロッパリーグ同時放送

私は正規表現が初めてです。誰かが私を案内してくれませんか。

以下は、私が使用している文字列の例です。

  • UEFA ヨーロッパリーグ 8 同時放送 8.00am-10.00am
  • MLB: シカゴ・ホワイト - ソックス at ロサンゼルス・エンゼルス 8.00PM-11.00AM
  • MLB 春: シカゴ・カブス vs ロサンゼルス・ドジャース 8.00aM-11.00PM
  • ライブ テスト クリケット ニュージーランド v イングランド: テスト 2 日目 9:00am-5:00am
  • UEFA ヨーロッパリーグ ハイライト 午後 10 時~午後 11 時
4

3 に答える 3

5
<?php

$str = array("Uefa Europa League Simulcast 8.00am-10.00Am",
"MLB: Chicago White Sox at Los Angeles Angels 8.00PM-11.00AM",
"MLB Spring: Chicago Cubs at Los Angeles Dodgers 8.00aM-11.00PM",
"Live Test Cricket New Zealand v England: Second Test Day Two 9:00am-5:00am",
"UEFA Europa League Hightlights 10.00pm-11.00pm");


foreach ($str as $s) {
   $new = preg_replace('/\s*\d?\d[\.\:]\d\d[ap]m-\d?\d[\.\:]\d\d[ap]m\s*$/i', '', $s);
   echo "$new\n";
}

出力

Uefa Europa League Simulcast
MLB: Chicago White Sox at Los Angeles Angels
MLB Spring: Chicago Cubs at Los Angeles Dodgers
Live Test Cricket New Zealand v England: Second Test Day Two
UEFA Europa League Hightlights

の説明/\s*\d?\d[\.\:]\d\d[ap]m-\d?\d[\.\:]\d\d[ap]m\s*$/i

  • \s*ゼロ個以上の空白を意味します
  • \d?1桁または0桁を意味します
  • \d数字を意味します
  • [\.\:]または._:
  • [ap]またはa_p
  • $文字列の終わりを意味します
  • /.../i大文字と小文字を区別しないことを意味します
于 2013-03-14T11:32:35.080 に答える
1

正規表現は必要ありません - 最後のスペースで文字列をトリムするだけです:

<?php

$str = array(
    "Uefa Europa League Simulcast 8.00am-10.00Am",
    "MLB: Chicago White Sox at Los Angeles Angels 8.00PM-11.00AM",
    "MLB Spring: Chicago Cubs at Los Angeles Dodgers 8.00aM-11.00PM",
    "Live Test Cricket New Zealand v England: Second Test Day Two 9:00am-5:00am",
    "UEFA Europa League Hightlights 10.00pm-11.00pm"
);

foreach ($str as $s) {
    $trimmed = substr($s, 0, strrpos($s, ' '));
    echo "$trimmed\n";
}

?>
于 2013-03-14T11:38:20.430 に答える
1

正規表現は通常の文字列のみに一致するため、提供されたサンプル文字列を分解して、規則性を探してみましょう。

8.00am-10.00Am
8.00PM-11.00AM
8.00PM-11.00AM
8.00PM-11.00AM
10.00pm-11.00pm

だから私はそれを見ることができます:

  • 常に 1 桁または 2 桁で始まります。これは次のように表現できます。\d{1,2}
  • この後にドット.またはコロンが続きます:。これは次のように表現できます。[.:]
  • これには常に 2 桁が続きます。\d{2}
  • 次に、大文字と小文字を区別しない文字列AMまたはのいずれか。PM大文字と小文字を区別しないようにするiには、パターン全体に修飾子を使用できamます。これはキャプチャ グループとして動作し、キャプチャする必要がないため、非キャプチャ グループで式を最適化できます。pm(am|pm)(?:am|pm)
  • 次にダッシュ-、これは文字通り表現できます
  • パターンの最初の部分が繰り返されます。

したがって、すべてをまとめると、次のようになります。

/\d{1,2}[.:]\d{2}(?:am|pm)-\d{1,2}[.:]\d{2}(?:am|pm)/i

しかし、待ってください...これにより、件名の文字列の末尾に空白が残ります。そうですね、trim()これだけでも構いませんが、正規表現を\s*パターンの先頭に追加することで、これを処理することもできます。

/\s*\d{1,2}[.:]\d{2}(?:am|pm)-\d{1,2}[.:]\d{2}(?:am|pm)/i

したがって、このパターンに一致するものはすべて空の文字列に置き換える必要があります。これは、PHP でpreg_replace()次のように行うことができます。

$pattern = '/\s*\d{1,2}[.:]\d{2}(?:am|pm)-\d{1,2}[.:]\d{2}(?:am|pm)/i';
$string = 'Uefa Europa League Simulcast 8.00am-10.00Am';

$string = preg_replace($pattern, '', $string);

var_dump($string);

動いているのを見る

于 2013-03-14T11:38:35.480 に答える