2011-04-30 40 views
0

我需要一个PHP的regExp这将找到所有的数字,但没有报价包装,例如: 找到这个:一些文本1234一些文本 但不碰这个:一些文本“一些文本1234一些文本”, 和字符串这应该被传递到: “1234” 或 “123” 等PHP的正则表达式找到没有引号的数字?

我有一个不完整的desision:

preg_match_all('/\b\d+\b/', $str, $matches); 

ve also tried something like this [^\"|\']+ but it didn科技工作的。

回答

0

您可以使用PHP断言:

http://php.net/manual/en/regexp.reference.assertions.php

preg_match_all("/\d+(?!')/s", $str, $matches); 
+0

Thx,至少U给了我看的方式,我记得2-3年前解决了这个问题,但现在刷新了记忆 - thx,祝你好运。 – 2014-01-14 18:03:06

1

我不知道,如果它可以用简单的RE来完成,但是你可以通过两步来实现。

1)过滤掉所有引用的字符串像

$filtered = preg_replace('/"[^"]+"/', '', $str) 

2)适用于您的正则表达式的结果

preg_match_all('/\b\d+\b/', $filtered, $matches); 

如果你的文字是不是巨大的或复杂的,它应该是罚款(取决于内存大小)

+0

我不需要用空格替换引号 - 我需要一个regExp来解决这个问题。 – 2011-04-30 09:21:23

+0

什么?如果你只需要得到这些数字(不在引号内),那么这个解决方案很容易,并且正是以这种方式工作:'$ str ='some“text 1234”lorem 542 2342“ispum 6”43';''' 542,2342,43' – Zap 2011-04-30 09:50:50

+0

因为你可以仔细阅读,并认识到我需要的文本将不可变与引号和埃特数字不包裹在引号找到。明白了吗?换句话说 - 找到数字,但不能用引号将引号和数字以及其他内容保留在那里而不做更改。 – 2011-04-30 16:57:20

相关问题