preg_match('/(東京都|北海道|(?:京都|大阪)府|.{6,9}県)((?:四日市|廿日市|野々市|臼杵|かすみがうら|つくばみらい|いちき串木野)市|(?:杵島郡大町|余市郡余市|高市郡高取)町|.{3,12}市.{3,12}区|.{3,9}区|.{3,15}市(?=.*市)|.{3,15}市|.{6,27}町(?=.*町)|.{6,27}町|.{9,24}村(?=.*村)|.{9,24}村)(.*)/', $str, $matches); UTF8 文字コードがUTF8のため.{2,3}県ではなく、.{6,9}県。 連続した文字列の対応 ○○市△△市、○○町△△町などの連続して同じ文字列が含まれるものを先読み(.{3,15}市(?=.*市))で抽出。2回目の同じ文字列が終端にならないようにする。 これにマッチしない四日市市、廿日市市、野々市市、杵島郡大町町を先行処理。 A