0

次の文字列の 3 つの単語を Perl 互換の正規表現と一致させるにはどうすればよいですか?

単語1#$単語2#$単語3

「word1、word2、word3」という実際の単語は事前にわかりません。#$ という区切り記号しか知りません。

また、マルチバイトエンコーディングを使用しているため、単語境界を使用できません。これは、たとえば、\w 制御文字では検出されないウムラウトなどの非 ASCII 文字を文字列に含めることができることを意味します。

4

6 に答える 6

2

この正規表現を試してください:

/(\w+)#\$(\w+)#\$(\w+)/

編集   詳細情報を提供した後(この回答へのコメントを参照):

/((?:[^#]+|#[^$])*)#\$((?:[^#]+|#[^$])*)#\$((?:[^#]+|#[^$])*)/
于 2009-07-24T17:56:08.423 に答える
1
#!/usr/bin/perl

use strict;
use warnings;

my $x = 'word1#$word2#$word3';
print $_, "\n" for split /#\$/, $x;
于 2009-07-24T18:00:18.103 に答える
1
$str = explode('#$', $str);

正規表現はこれにはやり過ぎです。

于 2009-07-24T18:23:21.193 に答える
0

これは、2が含まれるすべての文字列で機能します#

/([^#]+)\#\$([^#]+)\#\$([^#]+)/
于 2009-07-24T18:01:15.700 に答える
0

ラインで何をしたいかによって異なりますが、分割機能が役立つ場合があります。

ここに例があります。

my $line = "word1#$word2#$word3"
my @words = split('#$', $line)
于 2009-07-24T18:07:36.560 に答える
-2
/([^#]*?)#\$([^#]*?)#\$([^#]*)/
于 2009-07-24T18:02:58.847 に答える