英数字以外の文字列またはアンダースコアとピリオドの間のすべての文字列を取得するにはどうすればよいですか?たとえば、以下の文字列の場合は[sources_1st,sources]
となります。 https://stackoverflow.com/a/10596688/1032531も同様の質問でしたが、私にとってはうまくいかないようです。ピリオドの前に英数字の文字列をすべて検索する
<?php
function check($pattern,$str)
{
echo($pattern.'<br>');
preg_match($pattern, $str, $matches);
echo('<pre>'.print_r($matches,1).'</pre>');
}
$str='fullname("protocol",coalesce(sources_1st.protocol,sources.protocol))';
echo($str.'<hr>');
check('/[^.]+\.[^.]+$/',$str);
check('/[\w]\..*$/',$str);
check('/[^\w]\..*$/',$str);
check('/\w\..*$/',$str);
check('/\w+(?=.*\.)$/',$str);
check('/\w+(?=.*\\.)$/',$str);
check('/\b[^ ]+\.$/',$str);
check('/\b[^ ]+\\.$/',$str);
check('/.*?(?=\.)$/',$str);
出力:正規表現の下に使用
fullname("protocol",coalesce(sources_1st.protocol,sources.protocol))
--------------------------------------------------------------------------------
/[^.]+\.[^.]+$/
Array
(
[0] => protocol,sources.protocol))
)
/[\w]\..*$/
Array
(
[0] => t.protocol,sources.protocol))
)
/[^\w]\..*$/
Array
(
)
/\w\..*$/
Array
(
[0] => t.protocol,sources.protocol))
)
/\w+(?=.*\.)$/
Array
(
)
/\w+(?=.*\.)$/
Array
(
)
/\b[^ ]+\.$/
Array
(
)
/\b[^ ]+\.$/
Array
(
)
/.*?(?=\.)$/
Array
(
)
は、あなたが私たちに与えてくださいでした入力がどのように見えるのか、出力はどのようなものになるのでしょうか? – jrn
@jrn入力は '' fullname( "protocol"、coalesce(sources_1st.protocol、sources.protocol)) ''です。出力は '['sources_1st'、 'sources']' – user1032531