2012-10-24 1 views
1

영숫자가 아닌 문자에 문자열을 분할하려했거나 간단한 단어를 분리하려고했습니다. 즉시 내 마음에 온 접근 방식은 정규식을 사용하는 것입니다.PHP에서 영숫자가 아닌 문자열을 분할합니까? PHP의 기본 함수로 가능합니까?

예 :
$string = 'php_php-php php';
$splitArr = preg_split('/[^a-z0-9]/i', $string);

하지만이 방법으로보고 두 가지 문제가있다.

  1. 네이티브 PHP 함수가 아니며 서버에서 실행되는 PCRE 라이브러리에 전적으로 의존합니다.
  2. 동등하게 중요한 문제는 내가 단어에 구두점이있는 경우 어떤
    예 :이 뜻 [{U}{S}{A}{men}{s}{vote}]
    와 같은 문자열을 유출 그러나 내가 원하는 이제
    $string = 'U.S.A-men's-vote';
    $splitArr = preg_split('/[^a-z0-9]/i', $string);

    그것을 [{U.S.A}{men's}{vote}]

로 그래서 내 질문은 다음과 같습니다.

  • 어떻게 우리는 단어에 따라 그들을 쪼개었다?
  • PHP 네이티브 함수로 또는 다른 방식으로 우리가 의존하지 않는 곳에서 할 수 있습니까?

감사

+2

단어의 정의는 무엇입니까? 마침표는 허용됩니까?이 문장과 같은 내용은 무엇입니까? 그리고 나는 '나는 무엇에 관한 것인가? 이 정규식은 절대 사용하지 않지만 어쨌든 사용하겠습니다. " – LeonardChallis

+0

"단어 "로 정의하는 내용에 따라 다릅니다. 'USA '를 단어로 사용하려면 단어 분리 기호가 아닌 공백으로 채워지지 않은 정지 표시가 필요합니다. 공백, 물음표, 쉼표, 콜론 등으로 나눌 수 있습니다. – LSerni

+0

가능합니다. 문자열 (char by char)을 반복하고 char이 단어에 속하는지 아닌지에 상관없이 자신의 규칙을 적용하십시오. – Yoshi

답변

2

두 번째 인수에 fort 잊어 버린 1 또는 2 값을 사용하고 세 번째 인수에 하이픈, 전체 정지 및 아포스트로피 (또는 단어 부품으로 처리하려는 다른 문자)를 사용하는 경우와 비슷하게 들립니다. 한 단어의 일부로; 뒤에 array_walk() ~ trim의 문자가 결과 배열 값의 처음 또는 끝에있는 문자이므로 실제로 "단어"에 포함될 때 포함합니다.

+0

. 내 상황을 고려할 때 이것이 최고의 결과에 가장 가깝다고 생각합니다. 100 % 정확하지만 거의 없습니다. –

2

은 어느 쪽이든 당신은 PHP가 (당신은 또한 PCRE를) 설치하거나하지 않습니다. 첫 번째 요점은 문제가 아닙니다. 당신이 당신의 분할 구분 기호에서 구두점을 제외 할 경우

그런 다음, 당신이 당신의 문자 클래스에 추가해야합니다

preg_split('/[^a-z0-9.\']+/i', $string); 

당신은 상황에 따라 다르게 구두점 문자를 처리 할 경우 (예를 들어,을 점은 너무나 공백 다음 경우 구분), 당신이 할 수있는 일 :

preg_split('/\.\s+|[^a-z0-9.\']+/i', $string); 
+0

글쎄,'preg_ *'기능을 사용하지 않고 PHP 설치가 가능합니다. 실제로 그것은 실제로 일어나지 않습니다. 감사 표시. – deceze

0

이것은 PHP가 문제가 아니라 논리적 아니다.

단어를 -. 약어는 짧은 문장처럼 보일 수 있습니다.

이 특정 구문에만 맞는 솔루션을 만들어 직접 예제를 검색 할 수 있습니다. 그러나 가능한 모든 문구를 해결할 수는 없습니다. 그것은 연결 컴퓨팅 기반의 컨텐츠 인식을 필요로합니다.

1

내 의견에 따르면 ' ""이가되어'인용하기 때문에, 필요한만큼의 구분)

$splitArr = preg_split('/[\s,!\?;:-]+|[\.]\s+/', $string, -1, PREG_SPLIT_NO_EMPTY); 

당신은 다음 (가 정규 표현식에서 할 그렇게 쉬운 일이 아닙니다의 말씀을 "인용"는의 경우를 처리해야 할 것을 추가? 그리고 어떻게?).

그래서 '와'는 단어 안에 넣어 두는 것이 가장 좋습니다 (예 : "그것"은 한 단어이고 "두 단어"는 두 단어 임). 그런 다음 그 사례를 개별적으로 처리합니다. 예를 들어 regexp는 " '다시 첫 번째는 왼쪽 인용있는 일련의 단어와 마지막으로, 첫 번째 알려진 순서에게없는 (오른쪽 인용"'필요의 동안 제대로

they 're 'just friends'. Or that's what they say. 

처리에 일부 문제가 , '할', '할'...)은 응용 프로그램 수준에서 처리 될 수 있습니다.

관련 문제