2012-02-25 2 views
1

나는 아마도 + 또는 앞에 어떤 중간에 기호로 서명 및 부호없는 정수 상수를 반환 할 수 있어야합니다. 유일하게 허용 된 숫자는 내가 표현 전이나 정수 뒤에 마침표를 포함 할 수 없습니다라고 할 수있는 방법을 알아낼 수 없습니다 3, 4, 5Java 정규화 - "."을 포함하지 않는 정수의 경우 -

이다. "34 5 43"- "43 34.5"반환되는 문자열이 될 것입니다

이것은 내가 지금까지 가지고,하지만 난 말을 전달하는 경우 것입니다. 반환해야

모두가 "43"입니다.

public String getInts(String toBeScanned){ 

    String INT = ""; 
    Pattern p = Pattern.compile("\\b[+-]?[3-5]+\\b"); 
    Matcher m = p.matcher(toBeScanned); 

    if (m.matches() == true){ 
     INT = toBeScanned; 
    } 
    else{ 
     m = p.matcher(" " + toBeScanned); 
     while (m.find()){ 
     INT = INT + m.group() + " "; 
     } 
    } 
    return INT; 
} 

올바른 방향으로 생각하거나 푸시하면 감사하겠습니다. 첫 번째와 마지막 문자가 될 수 있음을 말할 수있는 방법이 있나요 [B \ 아니라이.]이 나를 밖으로 지옥을 실망

. 도움!

+0

"\\ b? (?: ([+ -]? [3-5.] +)?) + \ b?" matcher의 마지막 그룹을 얻으시겠습니까? –

+0

Acdtually, '\ b'은 자바 패턴에서 단어 경계 ***로 깨져 있습니다. *** 당신은 ** 자바의 네이티브 charset이 아닌 7 비트 문자만을 사용하십시오 ** 그렇지 않으면 [ Java 7 Pattern.UNICODE_CHARACTER_CLASS] (http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html#UNICODE_CHARACTER_CLASS) 컴파일 선택적 또는 동등한 포함 된 ""(? U) "' 깃발. 따라서 7 비트 데이터를 가지고 있는지 확인하거나 아니면 새로운 플래그를 사용하거나'\ b'을 사용하지 마십시오. – tchrist

답변

2

당신은 단어 경계 \b 여기를 원하지 않는다. 패턴이없는 점은없고 어떤 숫자가 허용되지 전에이 가장 자신의 주장을 만들 생각이

(?<![.\d])[+-]?[3-5]+(?![.\d]) 

here on Regexr

(?<![.\d]) 부정적인 lookbehind 주장입니다 참조하십시오, 그것은 말했다.

(?![.\d])는 패턴에는 도트가없고 어떠한 자리 허용 후 말한다 음 룩어 주장한다.

개선

는 "hf34"와 같은 물건을 일치하는지 피하기 위해 우리는 더 엄격한

(?<![.\w])[+-]?[3-5]+(?![.\w]) 

it on Regexr

참조 단어 경계 할 수 \b

\b은 단어 문자에서 단어가 아닌 문자로의 변경과 일치합니다. 단어 문자는 문자 또는 숫자 또는 _입니다.즉, 문자열의 시작/공백 사이에 \b이없고 [+-]이 없기 때문에 \b 앞에 [+-] 앞에 문제가 생길 수 있습니다.

+0

문제는 (? Ethan

+1

그러면 '\ d'가'\ w'로 바뀝니다. '(? stema

+0

당신은 천재입니다. 이것은 아름답게 작동합니다. 그리고 Regexr은 좋은 도구입니다, 저를 보여 주셔서 고마워요. 나는 그걸 알아 내지 못했을 테니, 고마워. – Ethan

0

"\ B 형 [+ -]? [.] [3-5] + [3-5] + \ B"

이 패턴은 순서가 일치하기에, 적어도 하나 개의 숫자가 있어야합니다 말한다 앞에 소수점 이하 하나의 숫자가 있습니다.

+0

그게 바로 내가하고 싶지 않은 것입니다. "." 앞뒤로 무시해야하는 번호입니다. – Ethan

0

첫 번째와 마지막 문자가 될 수 있음을 말할 수있는 방법이 있나요 [B \가 아닌가.] B 아니라 \

[^\.\b] 

일치 '.'

찾고 계신가요?

[^\.\b][+-]?[3-5]+[^\.\b] 

는 '43'일치하지만 '34 .5 '

+0

[^ \. \ b]는^\ 일 수 있음을 의미합니다. 또는 \ b. 그래서 이것은 효과가 없을 것입니다. 나는 그것을 벌써 시도했다. – Ethan

+0

'[\ b]'는 무엇을 의미한다고 생각하십니까? 경계는 제로 폭의 어설 션이므로, char 클래스에서는 사용할 수 없습니다. 백 스페이스를 믿을 수 있습니까? – tchrist

관련 문제