2010-11-30 6 views
1

큰 문자열이 있습니다 (여러 줄) 정규 표현식을 사용하여 숫자를 찾아야합니다. 내가 필요로하는 숫자의 위치는 항상 정확한 문자 순서에 따라 진행됩니다. 그래서 나는 비 정확한 숫자를 찾기 위해 일치하지 않는 것을 사용할 수 있습니다. 이 숫자를 얻기 위해 함께 정규식을 넣었지만 작동을 거부하고 그것을 알아낼 수 없습니다! 다음은 특정 위치의 큰 문자열에서 번호를 제거하십시오 [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 (온라인 정규식 제너레이터와 나의 정규 표현식에) 작동해야 함을 보여줍니다!

답변

2

g이 잘못된 수정 자이므로 삭제하십시오. 그것에서 작동하고 정규 표현식 엔진 링크, 관련하여

Ideone Link

+0

예에서 코드가 수정되었지만 여전히 작동하지 않고 ag 수정자가 있거나 의미가 더 구체적 일 수 있습니다. – Tristan

+0

@Tristan : 'g'수정 자 제거 . 유효하지 않습니다. – codaddict

+0

우수했다 문제를 일으키는 원인이 된 g이었다! 그 RegExr 내가 왜했는지 – Tristan

1

? Flex, 아마도 ActionScript RegExp 엔진에 내장되어 있습니다. 그들은 모두 동일하지 않으며, 각각 다릅니다.

이중 백 슬래시가 여러 개인 경우이 문자열에서 단일 문자 여야합니다.

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); 
+0

그런 짓을 한 가지 방법이 있지만 내가 추출 해야이 숫자의 여러 가지가 있고 그게 좀 clunky 이런 식으로 일을 수정자를 사용합니다. – Tristan

+0

당신은 $ lDelim에서 문자열을 폭발() 할 수 substr ($ 청크, 0, strpos ($ 청크, rDelim)) 각 청크에. 아직도 clunky. – rik

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; 

설명

: 나는 변수라는 제목 $ 문자열을 선언하고 처음 제시 한 변수가 동일했다. 관심있는 숫자 값의 양쪽에있는 문자가 항상 동일하다는 것을 나타 냈습니다. $ aMatches를 back reference 2와 같게 설정하여 $ aMatches에 관심있는 수치 값을 지정했습니다. 정규 표현식에서 괄호를 사용하면 숫자 앞에 문자를 포함하는 역 참조 1, 당신은 원한다. 그리고 숫자 뒤의 물건 인 역 참조 3. $ num_array를 그러한 역 참조의 변수 이름으로 지정했고 [2]는 두 번째 역 참조임을 나타냅니다. 그래서 $ num_array [1]은 역 참조 1에서 일치를 포함하고 $ num_array [3]는 역 참조 3에서 일치를 포함합니다.

여기 내 정규 표현식에 대한 설명은 다음과 같습니다. 아래 정규식과 일치하고 역 참조 번호 1로 일치«(sjdhfklsjaf < \? kjnsdfh)» 일치 문자 "sjdhfklsjaf <"말 그대로«sjdhfklsjaf <» 일치 문자를 "?"말 그대로«\?» 일치 문자 "kjnsdfh"말 그대로«kjnsdfh» 아래 정규식과 일치하고 역 참조 번호 2에 일치 항목을 캡처합니다.«(\ d +)» 한자리 숫자 0을 찾습니다.9«\ d +» 한 번에서 무제한까지 가능한 한 많은 시간을주고, 욕심이 많다. (+ 욕심이 많다)«+» 아래 정규식과 일치하고 역 참조 번호 3«(uihrfkjsn + % 5Bmlknsadlfjncas)» 문자 그대로«uihrfkjsn» 일치 문자 "+" "uihrfkjsn"문자를 일치«+»이 당신에게 행운을 빕니다하는 데 도움이 일치 문자 "% 5Bmlknsadlfjncas"말 그대로«% 5Bmlknsadlfjncas»

희망. 스티브

관련 문제