PHPには、次のようなテキストに一致する正規表現があります。
第24回会議-クイックブラウンフォックス[2012年1月10日から2012年9月26日]
私が思いついたパターンは次のようになります。
$pattern = "/(([0-9]{1,2})(st|nd|rd|th)\sMeeting\s-\s)?(.*)(\[([0-9]{1,2}\s(January|February|March|April|May|June|July|August|September|November|December)\s[0-9]{4})\sto\s([0-9]{1,2}\s(January|February|March|April|May|June|July|August|September|November|December)\s[0-9]{4})\])$/"
これはうまくいくようです。
ただし、最後の日付部分はオプションにしたいのですが。しかし、私が追加するとき?日付のグループ化後、文字列内にある場合、preg_matchは日付を取得しなくなりました。。*が乗っ取っているのではないかと思いますが、うまくいかないようです。