2012-11-05 2 views
0

문자열 집합에 적용해야하는 특정 규칙이있는 여기 데이터베이스가 있습니다. 문자열 내에서 발생할 수있는 식입니다. 내가 그 하드 코드 수 없다 (그들은 데이터베이스에 변경 될 수 있기 때문에) 그들은문자열의 일치 식

(word1 AND word2) OR (word3) 

과 같이 표현된다, 그래서 나는 프로그래밍 방식 정규식 패턴으로 그 표현을 돌려 생각했다.

아무도 이러한 작업을 아직 수행하지 않았거나 최선의 방법을 수행하는 방법에 대한 아이디어가 있습니까? 좀 더 복잡한 표현을 다루는 방법, 어떻게 구별하는 지에 대해서는 확신하지 못합니다.

편집 : Visual Studio/.NET에서 C#을 사용하고 있습니다.

데이터는 고객이 자신의 문서를 정리하고 싶어, 기본적으로 디렉토리 경로, 그래서 나는 데 문자열이 경로입니다는 DB의 표현처럼 보일 수 :

(office OR headquarter) AND (official OR confidential) 

이 경우 파일의 디렉토리 경로에 사무실 및 기밀 정보가 포함되어 있으면 일치해야합니다.

희망 사항이 명확 해집니다.

EDIT2 :

Heres는 몇 가지 더미 예 :

경로가 같을 수 :

c:\documents\official\johnmeyer\court\out\letter.doc 
c:\documents\internal\appointments\court\in\september.doc 
c:\documents\official\stevemiller\meeting\in\letter.doc 

과 같은 표현 :

(meyer or miller) AND (court OR jail) 

그래서이 표현이 일치합니다 첫 번째 경로/파일이지만 두 번째 및 세 번째 경로/파일은 아닙니다.

+0

어떤 언어를 어떻게 사용할 것입니까? – kjana83

+0

몇 줄의 실제 데이터를 제공하고 정규식 패턴을 일치시킬 수 있습니까? – OmegaMan

+0

내 편집보기 :) – FWeigl

답변

1

응답 없음,하지만 좋은 힌트 :

식은 당신이는 괄호로 구성된 실제 나무입니다. 각 노드가 AND 또는 OR 요소이고 잎이 단어 인 (이진) 트리 구조로 텍스트를 구문 분석하려면 스택 기계이 필요합니다. 그런 다음 깊이 첫 번째 검색을 사용하여 트리를 이동하고 하위 트리를 읽는 전후에 필요에 따라 접두사 및 접미사 데이터를 추가하여 필요한 언어로 정규 표현식을 간단하게 작성할 수 있습니다.

GenerateExpression(StringBuilder result)을 갖는 abstract class TreeNode을 고려하십시오. 각 실제 TreeNode 항목은 CombinationTreeNode (CombinationMode 및/또는 함께) 또는 SearchTextTreeNode (SearchText 속성 사용) 중 하나입니다.

GenerateExpression CombinationTreeNode 그런 유사합니다 위해 (StringBuilder의 결과) :

result.Append("("); 
rightSubTree.GenerateExpression(result); 
result.Append(") " + this.CombinationMode.ToString() + " ("); 
rightSubTree.GenerateExpression(result); 
result.Append(")"); 

GenerateExpression SearchTextTreeNode에 대한 (StringBuilder의 결과가) 훨씬 더 쉽게 :

물론
result.Append(this.SearchText); 

, 코드가 생성됩니다 내가하는 것처럼 입력 텍스트 대신 정규 표현식을 사용한다.

관련 문제