在我的方法中,我从源代码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编码的,所以我想知道它是怎么来的,以及我现在如何解决这个问题。你们有什么想法是什么以及如何解决它?
答案 0 :(得分:3)
正则表达式看起来没问题,但你正确使用它吗?对于Unicode字符串,您应该设置/u
参数。现在这只是推测,但也许在你的正则表达式无法正确识别的字符串中某处有一个非ASCII空白字符,将多字节序列切成两半并因此给你一个无效字符。
所以也许这有效:
preg_match('/^(.*?),\s*([0-9]{5})\s*(\S*)/u', $subject, $regs)
答案 1 :(得分:1)
为什么正则表达式?您只需使用
即可explode()
list($beforecomma, $aftercomma) = explode(',' $var);