Useful Regex Functions - twitter記法にアンカーをセット

次のtwitter_it関数では、テキスト中に@replyや#hashtagといったtwitter記法が含まれていた場合にアンカーをセットする

twitter_it_1.php

<?php
function twitter_it($text)
{
    $text= preg_replace("/@(\w+)/", '<a href="http://www.twitter.com/$1" target="_blank">@$1</a>', $text);
    $text= preg_replace("#(\w+)/", '<a href="http://search.twitter.com/search?q=$1" target="_blank">#$1</a>',$text);
    return $text;
}
?>

@や#からはじまる文字列にマッチする。#はこの関数を使用するサンプルファイルは次のとおり。

twitter_it_2.php

<?php
include_once('twitter_it_1.php');

$text = '@Hiroakio 日本語環境下でFMCakeMixを使うにあたり注意すべき点をまとめました。FileMakerでWebアプリやってる方々のご参考になれば幸いです :) http://bit.ly/ajIgKO #mycomj #FileMaker';
echo twitter_it($text);
?>

Webブラウザでtwitter_it_2.phpにアクセスする。

Webブラウザでtwitter_it_2.phpにアクセス。twitter表記の箇所にアンカーがセットされている

パターンがシンプルな分、汎用性が高い。特殊な記法を採用しているWebアプリで活躍する。

Useful Regex Functions - タグにアンカーをセット

次のtag_it関数では、テキスト中に「:」で囲まれた文字があった場合はそれをタグとして扱い、指定したサイトへのアンカーをセットする。

tag_it.php

<?php
function tag_it($text)
{
    $text= preg_replace("/:(\w+):/", '<a href="http://www.buildinternet.com/tag/$1/" target="_blank">$1</a>',$text);
    return $text;
}
?>

この関数ではテキスト中に":PHP:"という文字列があった場合、http://www.buildinternet.com/tag/PHP/へのアンカーを生成する。利用するWebアプリに応じて、patternとreplacementを変更しよう。

Useful Regex Functions - 特定文字をハイライト

次のhighlight_terms関数では、WordPressブログのタイトルにマッチする文字列にハイライトのスタイルを指定する。

hightlight_terms_1.php

<?php
function highlight_terms($keys_array)
{
    $title = get_the_title();
    return preg_replace('/('.implode('|', $keys_array) .')/iu', '<span class="highlight">$0</span>', $title);
}
?>

これを応用し「配列で指定したキーワードをハイライトさせる」という関数を作成してみよう。

hightlight_terms_2.php

<?php
function highlight_terms($text, $keys_array=array())
{
    return preg_replace('/('.implode('|', $keys_array) .')/iu', '<span style="background-color: #ff9999">$0</span>', $text);
}

$text = <<< EOF
FreeBSD開発チームは6月18日(世界協定時)、次期リリースのFreeBSD 8.1のリリース候補第1版を公開した。x86、AMD64のほかPowerPC、SPARC、IA64といったアーキテクチャに対応している。今後は、6月中に第2版のリリース候補版を公開し、7月初旬ごろにFreeBSD 8.1の正式リリースが予されている。

x86およびAMD64については、DVDイメージも用意されているが、現在のFTPのミラーリングシステムではファイルサイズが2GBを超えると配布できないため、一部のパッケージに関してはISOイメージに含まれていない。開発チームは「なるべく早急にこの制限を取り除きたいと考えているが、8.1の正式提供までには間に合いそうもない」としている。

イメージファイルのダウンロードは http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/mirrors-ftp.html から行える。FreeBSD 8.0または8.1-BETAのユーザであれば、

# freebsd-update upgrade -r 8.1-RC1

上記のようにfreebsd-updateコマンドを使ってアップデート可能。
EOF;
echo highlight_terms($text, array('FreeBSD','AMD64'));
?>

作成したhighlight_terms_2.phpにアクセスする。

Webブラウザでhightlight_term_2.phpにアクセス。配列に指定したFreeBSD, AMD64がハイライトされている

検索した文字列がどこにあるか、をパッと見でわかるUIはなにかとありがたい。フリーワード検索などのハイライトでも活躍しそうだ。

Useful Regex Functions - URI slug生成

次のcreate_slug関数では、文字列よりURI slugを生成する。

create_slug_1.php

<?php
function create_slug($string)
{
    $string= strtolower(trim($string));
    $string= preg_replace('/[^a-z0-9-]/', '-', $string);
    $string= preg_replace('/-+/', "-", $string);
    return $string;
}
?>

英数字以外の文字列がすべてハイフンに置換される。この関数を使用するサンプルファイルは次のとおり。

create_slug_2.php

<?php
include_once('create_slug_1.php');

$text = array
(
    '2010/05/how-to-automatically-linkify-text-with-php-regular-expressions',
    'articles/2010/04/30/ie9network',
    'articles/2010/04/27/scooter',
    'articles/2010/06/18/ie9-compatibility-features',
    'articles/2010/06/10/bash-array',
    'articles/2010/06/09/css-drop-cap',
    'articles/2010/05/28/html-id-class-naming-rule',
    'articles/2010/05/28/jarlsberg'
);

foreach ($text as $value)
{
    echo create_slug($value).'<br>';
}
?>

作成したcreate_slug_2.phpにアクセスする。

Webブラウザでcreate_slug_2.phpにアクセス。英数字以外の文字列がすべてハイフンとなり、簡単にURI slugを作成できる

応用編として、How to Automatically Linkify Text with PHP Regular Expressionsの内容/関数を参考に、はてなid記法を抽出する正規表現を書いてみよう。

hatena_it.php

<?php
function hatena_it($text)
{
    $text= preg_replace("/id:[a-zA-Z][a-zA-Z0-9_-]{1,30}[a-zA-Z0-9]/", '<b>$0</b>',$text);
    return $text;
}
?>

この関数ではテキスト中にid:xxxといった「はてなid」にマッチした部分を太字にする。