0

私は3つの異なる文字列を持っています:

  1. http://site.com/id-name_of_news.html
  2. http://site.com/category/subcategory/id-name_of_news.html
  3. http://site.com/2008/04/02/name_of_news.html

このそれぞれからname_of_news、ほぼすべての記号を含むことができる文字列を取得する必要があります。.html最初から/123-(ID付きのスラッシュ)または(日付)まで行くのが賢明だと思いますが/02/、より適切な方法でそれを行う方法がわかりません...誰かが私を助けることができるでしょうか?

4

4 に答える 4

3

逆に行く必要はありません。正規表現を構築して、キャプチャ グループでその部分を取得できます。

次の正規表現を使用できます。

~.*?/(?:\d+-)?([^/]*)\.html~

...そしてグループ1を取得します。

~
  ^
  .*      # match everything
  /       # Till the last `/`
  (?:     # Non-capturing group
     \d+-   # One or more digits followed by a hyphen
  )?      # Optional
  (       # Capture group 1
     [^/.]*  # Match anything except `/` or `.`
  )       
  \.     # Match a dot
  html    # html (at the end)
  $
~
于 2013-10-06T10:45:57.217 に答える
0

これには本当に正規表現が必要ですか。次の代替アプローチを使用できます。

  1. .htmlを使用して終了位置を見つける$pos = strrpos($url, '.html');
  2. を使用して/後方から最も近いものを見つけるpos$slashpos = strrpos($url, '/', $pos * -1);
  3. $urlから始まる部分文字列を$slashpos取る$pos
于 2013-10-06T10:56:43.293 に答える
0
$url = 'http://site.com/id-name_of_news.html';
var_dump(end(explode('/', $url)));

また

$url = 'http://site.com/id-name_of_news.html';
var_dump(substr($url, strrpos($url, '/')+1));
于 2013-10-06T10:46:44.123 に答える