2014-11-05 2 views
-1

나는 다음과 같은 정규 표현식을 가지고 있는데, # x, x는 숫자를 찾으려고합니다. 2 번 경기와 관련된 경기가 없을 때도 경기에 임할 수있었습니다. 누군가이 작품을 두 가지 방법으로 만드는 방법을 도울 수 있습니까?#number를 검색하기위한 PHP 정규식

/(\G|\s+|^)#(\d+)((?=\s+)|(?=::)|$)/i 
라인

This is a test #1234 end test 

에서 작동하지만이를 달성하기 위해 변경해야합니다 알고

This is a test #1234end test 
This is a test#1234 end test 
This is a test.#1234 end test 
This is a test #1234. End test 

누구와도 작동하지 않습니다

?

편집, 제 3 그룹에서는 영숫자 만 허용하려고 시도하고 있습니다. 지금은 :: 및 공백이 있습니다. 이것들을 1로 합쳐서 글자 나 숫자를 찾지 못하도록하는 방법이 있습니까

+6

'/ # (\ d +) /'을 사용하지 않는 이유는 무엇입니까? – anubhava

+2

귀하의 시도는 몇 가지 부정적인 경우를 암시합니다. ** 당신이 매치하고 싶지 않은 ** 무엇입니까? – bishop

답변

0
(\G|\s+|^)#(\d+)((?=[^[:alnum:]])|$) 

나는 세 개의 그룹을 유지하고 싶었지만 세 번째 그룹 만 변경했습니다. 나는 3 번째 그룹에서 :: and \ S 공백 문자를 제거하고, 단지 2 개의 조건을 포함하기 때문에 영숫자가 아닌 간단한 체크를 추가했다.

(\G|\s+|^) 
#(\d+) 
((?=[^[:alnum:]])|$) 

[^[:alnum:]] 
+0

이 답변은 낮은 품질의 게시물 검토 대기열에 있습니다. 이유는 설명이없는 코드 일 뿐이니까요. 코드가하는 일과 질문에 대한 답변을 설명하여 답변을 개선하십시오. [프로그래밍에 관한 질문에 도움이되는 조언] (http://msmvps.com/blogs/jon_skeet/archive/2009/02/17/answering-technical-questions-helpfully.aspx)을 읽어보십시오. –

+0

@AdiInbar 이것이 하나이다. http://stackoverflow.com/a/26759844/ 이것은 대리인에게 우대 조치를해서는 안된다. 그 남자는 그의 대답에 대해 거의 설명하지 않습니다. –

+0

@ Fred-ii- 당신이 말하고자하는 것이 확실하지 않지만 LQP 리뷰에서 코드 전용 답변을 만났을 때 내 주식 의견입니다. 본질적으로 일부 코드 전용 답변은 실제로 설명을 요구하지 않습니다. 왜냐하면 문제를 해결하는 방법은 자명 한 것이기 때문에 설명을 필요로하지 않지만 여기서는 그렇지 않습니다. 다음은 정규식 질문에 대한 답변을 얻으려는 아이디어에 대한 최근 예제입니다. http://stackoverflow.com/a/26575011/1248365. 어쨌든, 내가 이런 종류의 리뷰 의견을 남겨 둘지 여부는 포스터의 담당자가 얼마나 높은지에 달려 있지 않습니다. –

2

preg match를 /#\d+/i으로 실행하면 찾고자하는 것이 있습니다. 당신은이 결과를 얻을 것이다

$items = [ 
    "This is a test #1234end test", 
    "This is a test#1234 end test", 
    "This is a test.#1234 end test", 
    "This is a test #1234. End test" 
]; 

foreach($items as $test){ 
    preg_match("/#\d+/i", $test, $matches); 
    var_dump($matches); 
} 

:

array(1) { 
    [0]=> 
    string(5) "#1234" 
} 
array(1) { 
    [0]=> 
    string(5) "#1234" 
} 
array(1) { 
    [0]=> 
    string(5) "#1234" 
} 
array(1) { 
    [0]=> 
    string(5) "#1234" 
} 

당신이 결과에 #을 원하지 않는 경우는, 당신은 다음 /#(\d+)/i

의 서브 패턴을 할 수 있도록이 다음 실행 그러면 다음과 같이 표시됩니다.

array(2) { 
    [0]=> 
    string(5) "#1234" 
    [1]=> 
    string(4) "1234" 
} 
array(2) { 
    [0]=> 
    string(5) "#1234" 
    [1]=> 
    string(4) "1234" 
} 
array(2) { 
    [0]=> 
    string(5) "#1234" 
    [1]=> 
    string(4) "1234" 
} 
array(2) { 
    [0]=> 
    string(5) "#1234" 
    [1]=> 
    string(4) "1234" 
}