次の文字列の 3 つの単語を Perl 互換の正規表現と一致させるにはどうすればよいですか?
単語1#$単語2#$単語3
「word1、word2、word3」という実際の単語は事前にわかりません。#$ という区切り記号しか知りません。
また、マルチバイトエンコーディングを使用しているため、単語境界を使用できません。これは、たとえば、\w 制御文字では検出されないウムラウトなどの非 ASCII 文字を文字列に含めることができることを意味します。
次の文字列の 3 つの単語を Perl 互換の正規表現と一致させるにはどうすればよいですか?
単語1#$単語2#$単語3
「word1、word2、word3」という実際の単語は事前にわかりません。#$ という区切り記号しか知りません。
また、マルチバイトエンコーディングを使用しているため、単語境界を使用できません。これは、たとえば、\w 制御文字では検出されないウムラウトなどの非 ASCII 文字を文字列に含めることができることを意味します。
この正規表現を試してください:
/(\w+)#\$(\w+)#\$(\w+)/
編集 詳細情報を提供した後(この回答へのコメントを参照):
/((?:[^#]+|#[^$])*)#\$((?:[^#]+|#[^$])*)#\$((?:[^#]+|#[^$])*)/
#!/usr/bin/perl
use strict;
use warnings;
my $x = 'word1#$word2#$word3';
print $_, "\n" for split /#\$/, $x;
$str = explode('#$', $str);
正規表現はこれにはやり過ぎです。
これは、2が含まれるすべての文字列で機能します#
/([^#]+)\#\$([^#]+)\#\$([^#]+)/
ラインで何をしたいかによって異なりますが、分割機能が役立つ場合があります。
ここに例があります。
my $line = "word1#$word2#$word3"
my @words = split('#$', $line)
/([^#]*?)#\$([^#]*?)#\$([^#]*)/