PHP preg_match问题

时间:2009-07-24 17:53:05

标签: php regex preg-match

如何将以下字符串中的三个单词与Perl兼容的正则表达式匹配?

WORD1#$ WORD2#$ WORD3

我事先并不知道实际的单词“word1,word2和word3”。我只知道分隔符,即#$。

我不能使用单词边界,因为我有多字节编码。这意味着,例如,字符串可以包含非ASCII字符,如变音符号,\ w控制字符无法检测到。

6 个答案:

答案 0 :(得分:2)

试试这个正则表达式:

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

修改在您向我们提供了更多信息后(请参阅此答案的评论):

/((?:[^#]+|#[^$])*)#\$((?:[^#]+|#[^$])*)#\$((?:[^#]+|#[^$])*)/

答案 1 :(得分:1)

#!/usr/bin/perl

use strict;
use warnings;

my $x = 'word1#$word2#$word3';
print $_, "\n" for split /#\$/, $x;

答案 2 :(得分:1)

$str = explode('#$', $str);

正则表达式对此有点过分。

答案 3 :(得分:0)

这适用于任何包含2 #

的字符串
/([^#]+)\#\$([^#]+)\#\$([^#]+)/

答案 4 :(得分:0)

分割功能可能很有用,虽然它取决于你想要对线做什么。

这是一个例子。

my $line = "word1#$word2#$word3"
my @words = split('#$', $line)

答案 5 :(得分:-2)

/([^#]*?)#\$([^#]*?)#\$([^#]*)/