正则表达式无效

时间:2013-12-04 14:05:13

标签: php regex encoding

在我的方法中,我从源代码Plange Mühle 1, 40221 Düsseldorf中提取了以下字符串。我现在要做的是过滤掉所有内容,直到逗号,然后是数字,然后是单词。我所做的就是做这个正则表达式,它不起作用。

^(.*?),\s*([0-9]{5})\s*(\S*)

但这应该正常工作,对吗?所以我开始再次删除所有内容,然后逐个部分地删除。当我只有这个部分时,它会占用所有内容,直到它起作用的逗号,但仅限于逗号之前的数据。但是,在第一个空格之后,问题就出现了。当我现在做了任何事后,就像[^0-9]出现了一个标志。这是一个

array(2) { [0]=> string(19) "Plange Mühle 1,�" [1]=> string(17) "Plange Mühle 1" }

问号?它是什么?我不知道它来自哪里。我的文件都是UTF-8编码的,所以我想知道它是怎么来的,以及我现在如何解决这个问题。你们有什么想法是什么以及如何解决它?

2 个答案:

答案 0 :(得分:3)

正则表达式看起来没问题,但你正确使用它吗?对于Unicode字符串,您应该设置/u参数。现在这只是推测,但也许在你的正则表达式无法正确识别的字符串中某处有一个非ASCII空白字符,将多字节序列切成两半并因此给你一个无效字符。

所以也许这有效:

preg_match('/^(.*?),\s*([0-9]{5})\s*(\S*)/u', $subject, $regs)

答案 1 :(得分:1)

  

为什么正则表达式?您只需使用explode()

即可
 list($beforecomma, $aftercomma) = explode(',' $var);