Perl の正規表現で()を付ける場合と付けない場合 – プログラミング – Home

Perl の正規表現で()を付ける場合...
 
通知
すべてクリア

[解決済] Perl の正規表現で()を付ける場合と付けない場合


ちゃり
 ちゃり
(@ちゃり)
ゲスト
結合: 19年前
投稿: 2
Topic starter  

こんにちわ。

Perl の正規表現についてご教示ください。

例えば、'<hogehoge>7月25日 午前 更新しました</hogehoge>' というような文字列から、'7
月25日 午前'だけを抜きだそうと、
if ($html =~ /^(.*?)>([^>]+?月.+?日\s+\S+)\s+(.*)$/si) {
と書いて $2 の値を取得しようとしたのですがマッチングしませんでした。
そこで、何となく直感で
if ($html =~ /^(.*?)>(([^>]+?)月(.+?)日 \S+)\s+(.*)$/si) {
という具合に、'[^>]+?' と '.+?' を()で囲ってやると正しく取得出来ました。

そこで質問なのですが何故この場合、()で囲ってやらないと正しくマッチングしないのでしょ
うか?
'[^>]+?月'の、[^>]+? を()で囲む/囲まないでマッチングの条件にどういった変化が発生す
るのでしょう?

識者の方にご教示いただければ幸いです。


引用未解決
トピックタグ
Web
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

正確なところは分からないですが、
漢字の文字コードが悪さをしているような気がします。

[^>]+?(月).+?(日)
とかでも、マッチしますね。


返信引用
ちゃり
 ちゃり
(@ちゃり)
ゲスト
結合: 19年前
投稿: 2
Topic starter  

dairygoodsさん、ありがとうございました。

? が「月」とか「日」と並ぶとよくないんですかねえ・・・
() が単なる区切り文字代わりになってマッチング出来るということですね。

日本語混じりのマッチングをして、「これであってるはずなのになあ」という状況になったら、
とりあえず () で囲んでみることにします。:-)


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました