2013-05-06 3 views
1

여기 표현의 차이는 실제로 볼 수 없습니다.비어 있지 않은 문자열 - 일반 언어

모든에서 임의의 문자열은 있다하고있다 : 어떤 비어 있지 않은 문자열을

알파벳 Σ :

{a, b, c} 

내가 (a+b+c)* 중 하나 a, b, c

될 수 있음을 이해하지만 차이는 단지 또 다른 것을 의미한다 (a+b+c)?

enter image description here

이 답변은 일부 강의 슬라이드에서 가져옵니다.

누군가가 왜 다른 (a+b+c)이 필요한지 설명해주세요.

감사합니다.

+0

"빈 문자열"의 의미를 이해하고 있습니까? –

+0

나는 그렇지만 아직도 왜 우리가 두 개 (a + b + c)가 필요한지 확실히 알지 못합니다. – PaulEx10

답변

1

문자열이 ""인 경우 비워 둘 수 있습니다. 이것은 문자열에 유효한 값이므로 "모든 문자열"카테고리의 일부가됩니다.

+0

첫 번째 것을 이해하지만 두 번째는 이해가되지 않습니다. 우리가 두 가지를 사용하는 이유는 무엇입니까? (a + b + c) - 우리는 단지 하나만 사용할 수 있습니까? – PaulEx10

3

별표는 0 번 이상을 나타냅니다. 따라서 첫 번째 예제는 빈 문자열이 될 수 있습니다. 그러나 두 x 째. 자열은 a, b 또는 c 중 하나에서 시작해야하며, 0 개 이상의 다른. 자로 시작해야 하 G로, 길이가 적어도 하나의 문자가됩니다.

+0

별표가 양쪽에 간섭하지 않고 (끝에 있습니까?) 별표가 루프와 같은 것으로 추정합니까? 따라서 필요하다면 많은 사건이 있습니까? – PaulEx10

+1

별표는 바로 앞에 오는 용어에만 적용됩니다. 여러 용어에 적용해야하는 경우에는 일종의 대괄호로 묶을 것입니다 (이전 예제에서 보았던 것 같습니다). –

+0

아아, 고마워, 제임스, 너 큰 도움이야! – PaulEx10

1

클레이 스타 별 Clouser를 RE에 적용하면 (a+b+c)*의 경우 빈 문자열 (길이 = 0)이 생성되므로 *이 0으로 바뀌면 결과는 빈 문자열이됩니다. 여기서 빈 문자열을 없애기 위해 (a+b+c)* 앞에있는 (concat) (a+b+c)을 넣으십시오. 따라서 (a+b+c)*에 의해 생성 된 모든 문자열 앞에 a or b or c이 붙습니다. 이렇게하면이 RE에서 빈 문자열을 생성 할 수 없습니다.

관련 문제