从特定位置的大字符串中删除数字[PHP RegEx]

时间:2010-11-30 11:58:52

标签: php regex

我有一个大字符串(多行)我需要用正则表达式查找数字。我需要的位置总是按照确切的字符顺序进行/跟随,所以我可以使用非捕获匹配来确定我需要的确切数字。我把一个正则表达式放在一起得到这个数字,但它拒绝工作,我无法理解它!

以下是我无法开展的一小部分PHP代码,展示了我需要的基本格式

$sTestData = 'lak sjdhfklsjaf<?kjnsdfh461uihrfkjsn+%5Bmlknsadlfjncas dlk';

$sNumberStripRE = '/.*?(?:sjdhfklsjaf<\\?kjnsdfh)(\\d+)(?:uihrfkjsn\\+%5Bmlknsadlfjncas).*?/gim';

if (preg_match_all($sNumberStripRE, $sTestData, $aMatches))
{
    var_dump($aMatches);
}

我需要的数字是461而且这个数字两边的空格之前/之后的字符总是相同的

获得上述正则表达式工作的任何帮助都会很棒!

此链接RegExr: My Reg Ex(对于在线正则表达式创建者和我的正则表达式)表明它应该可以正常工作!

4 个答案:

答案 0 :(得分:2)

g是无效的修饰符,请将其删除。

Ideone Link

答案 1 :(得分:1)

关于那个链接,它正在使用哪个正则表达式引擎?内置Flex,因此可能是ActionScript RegExp引擎。它们并非完全相同,每一种都各不相同。

你有许多双反斜杠,它们在这些字符串中应该是单一的。

答案 2 :(得分:0)

$sTestData = 'lak sjdhfklsjaf<?kjnsdfh461uihrfkjsn+%5Bmlknsadlfjncas dlk';
$lDelim = ' sjdhfklsjaf<?kjnsdfh';
$rDelim = 'uihrfkjsn+%5Bmlknsadlfjncas ';
$start = strpos($sTestData, $lDelim) + strlen($lDelim);
$length = strpos($sTestData, $rDelim) - $start;
$number = substr($sTestData, $start, $length);

答案 3 :(得分:0)

使用正则表达式,您可以使用以下代码完成目标:

   $string='lak sjdhfklsjaf<?kjnsdfh461uihrfkjsn+%5Bmlknsadlfjncas dlk';
   if (preg_match('/(sjdhfklsjaf<\?kjnsdfh)(\d+)(uihrfkjsn\+%5Bmlknsadlfjncas)/', $string, $num_array)) {
   $aMatches = $num_array[2];
   } else {
   $aMatches = "";
   }
   echo $aMatches; 

说明: 我声明了一个名为$ string的变量,并使其等于您最初呈现的变量。您指出感兴趣的数值两侧的字符始终相同。我通过设置等于后引用2的$ aMatches将感兴趣的数值分配给$ aMatches。使用正则表达式中的括号将得到3个匹配:后向引用1将包含数字之前的字符,反向引用2将包含数字你想要的,反向引用3是数字之后的东西。我将$ num_array指定为这些反向引用的变量名称,[2]表示它是第二个反向引用。因此,$ num_array [1]将包含反向引用1中的匹配,而$ num_array [3]将包含反向引用3中的匹配。

以下是我的正则表达式的解释: 匹配下面的正则表达式并将其匹配捕获到反向引用号1«(sjdhfklsjaf&lt; \?kjnsdfh)»    匹配字符“sjdhfklsjaf&lt;”字面意思«sjdhfklsjaf&lt;»    匹配字符“?”字面上«\?»    匹配字符“kjnsdfh”字面上«kjnsdfh» 匹配下面的正则表达式并将其匹配捕获到反向引用号2«(\ d +)»    匹配单个数字0..9«\ d +»       在一次和无限次之间,尽可能多次,根据需要回馈(贪婪)«+» 匹配下面的正则表达式并将其匹配捕获到反向引用号3«(uihrfkjsn +%5Bmlknsadlfjncas)»    匹配字符“uihrfkjsn”字面意思«uihrfkjsn»    匹配字符“+”按字面意思«+»    匹配字符“%5Bmlknsadlfjncas”字面意思«%5Bmlknsadlfjncas»

希望这对你有帮助,祝你好运。 史蒂夫