2014-10-22 4 views
0

최종 목표는 oData $ 필터 문자열을 추출하고 PHP에서 mySQL 문자열을 생성하는 것입니다. 예를 들어 :문자열에서 그룹 추출하기

(Field1 eq '(test)' or Field2 lt 20) and (beginsWith('test',Field3) or Field4 eq 3) 

그것은 단지가 고유 키워드를 대체하고의 문제가 아니다

(Field1 = '(test)' OR Field2 < 20) AND (Field3 LIKE 'test%' OR Field4 = 3) 

될 것입니다. 피할 수없는 것 나는 startsWith ('test', Field3)가 필드이고 그 부분을 mySQL 문으로 변환 할 수 있다는 것을 알 수 있기를 원합니다. 내가 지금까지 시도한 것은 어디 클래스를 저장하는 WhereGroup 클래스를 생성하므로 괄호 안에있는 각 그룹에 인스턴스가 있고 각 명령문은 Where 인스턴스에있게됩니다. 그런 다음 재귀 적으로 where 문을 생성합니다. 하지만 지금은 문자열을 지능적으로 파싱하려고 시도하고 있습니다.

질문 거기에 이미 뭔가 비슷한 일을 할 수있는 뭔가가 있습니까? 아니면 처음부터 무언가를 만드는 길에 있습니까?

+0

정규식? –

+0

당신은 나에게 문자열 테스트와 '테스트', Field3을 WhereGroup으로 포함하지 않는 곳에 생성 된 하나의 예제를 보여줄 수 있습니까? –

+0

'(\ (('test', Field3) \))'일치하는 정규 표현식은'('test', Field3)'입니다. 그게 당신이 찾고있는거야? –

답변

2

.*(?=\s+a)(Field1 eq '(test)' or Field2 lt 20)

(\(b.*) 당신이 원하신다면 (beginsWith('test',Field3) or Field4 eq 3)

당신이 또는 그룹으로, 이러한 결합 할 수 있습니다 얻을 것이다 얻을 것이다 -이인지 확실하지 않다

.*(?=\s+a)|(\(b.*) 

네가 뭘하니? 복잡한 것을 뭔가 간단하게 바꾸는 것은 많은 어려움을 겪고있는 것처럼 보입니다. 문자열을 추출하기 위해 몇 가지 정규식 필터를 작성해야 할 것입니다.

+0

올바른 트랙에 있지만 뭔가 일반적인 필요가 무엇입니까 (? = \ s + a) 뭐하는거야? –

+0

'? ='는 * 긍정적 인 lookahead *이며, 공백 문자와 'a'문자가 뒤따라 오는 공백 문자와 그 일부를 찾지 않습니다. –

+0

나는 네가 답장을 못하게하는 것과 같은 몇 가지 정규 표현식을 사용하는 것이 최선의 방법이라는 것을 알고 있다고 생각한다. –

관련 문제