문제

나는 그것을 가져 갔다 대담한 불 덩어리에서 자유주의 URL Regex, 그것을 병합했습니다 Alan Storm 개선 중 일부 그리고 괄호 안에 IDN 숯을 지원하는 것과 같은 일부 버그를 고치는 데 대한 내 길을 해킹했습니다. 이것이 바로 다음입니다.

/(?:[\w-]+:\/\/?|www[.])[^\s()<>]+(?:(?:\([^\s()<>]*\)[^\s()<>]*)+|[^[:punct:]\s]|\/)/

그러나 나는 해결할 수없는 버그를 만났다.

'www.dsd(sd)sdsd.com' // can also be the valid 'www.dsd.com/whatever(whatever)'

위의 URL은 다음과 같이 인식되고 있습니다 www.dsd(sd)sdsd.com' (또는 www.dsd.com/whatever(whatever)') 대신에 www.dsd(sd)sdsd.com (또는 www.dsd.com/whatever(whatever)). URL에 괄호가있을 때만 발생하는 것 같습니다.

'www.sampleurl.com'

올바르게 인식되고 있습니다 www.sampleurl.com.

제 생각에는 그만큼 [^[:punct:]\s]|\/ URL에 괄호가있는 경우 REGEX의 일부가 실행되지 않습니다., 나는 한동안 노력했지만 해결책을 찾을 수없는 것 같습니다. 누구든지 나를 도울 수 있습니까?

상품의 경우 a를 설정했습니다 Rubular Permalink REGEX 및 일부 테스트 데이터 (마지막 URL이 실패합니다).


Gruber의 동정인은 약간 서두르고 있다고 생각합니다. 예를 들어 URL과 같은 일과 일치하지 않습니다.

http://en.wikipedia.org/wiki/Something_(Special)_For_You

둘 다 그것을보고 더 깊은 감명을 받았습니다 그루버 그리고 앨런 이 정말 간단한 오타를 놓쳤습니다.

\([\w\d]+\)

그렇지 않을 것입니다 \(\w+\) 충분하다? :에스

도움이 되었습니까?

해결책

것 같아 Gruber는 그의 정규 표현을 수정했습니다:

\b((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.])(?:[^\s()<>]+|\([^\s()<>]+\))+(?:\([^\s()<>]+\)|[^`!()\[\]{};:'".,<>?«»“”‘’\s]))

이제 잘 작동합니다.

다른 팁

www.dsd (SD) sdsd.com은 유효한 도메인 이름이 아닙니다.

당신이 있었다면 'www.dsd.com/whatever(whatever)', 그것은 올바르게 인식 될 것입니다. (또는 적어도 내 시험에 있습니다)

 /(?:[\w-]+:\/\/?|www[.])[^\s()<>]+(?:(?:\([^\s()<>]*\)[^\s()<>]*)+|[^[:punct:]\s]|\/)/
  www.                   |               |            |
                          dsd            |            |
                                          (sd)        |
                                                       sdsd.com'

그게 내가 이것이 무너진다고 생각하는 방법 ... 위의 regex의 조금 (sd) 탈출 한 오픈 파렌으로 시작하고 쳐다 보는 숯불 일치 sd, 그런 다음 탈출 한 폐쇄 된 Paren, 다음은 [^\s()<>]* 어떤 일치하는지 sdsd.com'.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top