PHP로 괄호와 괄호 사이의 텍스트를 어떻게 제거 할 수 있을지 궁금합니다.괄호 사이에 텍스트 제거하기 PHP
예 :
ABC (Test1을)
나는 그것이 (Test1 파일)을 삭제 만두고 싶습니다 ABC
감사
PHP로 괄호와 괄호 사이의 텍스트를 어떻게 제거 할 수 있을지 궁금합니다.괄호 사이에 텍스트 제거하기 PHP
예 :
ABC (Test1을)
나는 그것이 (Test1 파일)을 삭제 만두고 싶습니다 ABC
감사
$string = "ABC (Test1)";
echo preg_replace("/\([^)]+\)/","",$string); // 'ABC '
preg_replace
는 펄 기반 일반 표현 교체 루틴. 어떤이 스크립트가하는 것은 문자 하지 닫는 괄호의 수에 따라, 다시 닫는 괄호 다음에하는 여는 괄호의 모든 항목을 일치 한 다음 전원을 삭제합니다
정규 표현식 고장 :
정규식없이/ - opening delimiter (necessary for regular expressions, can be any character that doesn't appear in the regular expression
\(- Match an opening parenthesis
[^)]+ - Match 1 or more character that is not a closing parenthesis
\) - Match a closing parenthesis
/- Closing delimiter
$string="ABC (test)"
$s=explode("(",$string);
print trim($s[0]);
빠르고 지저분합니다. 나는 그것을 좋아한다. –
여러분, 정규 표현식은 비정규직 언어를 구문 분석하는 데 사용할 수 없습니다. 비정규 언어는 주 (state)가 해석 할 필요가있는 언어입니다 (즉, 현재 얼마나 많은 괄호가 열려 있는지 기억).
위의 모든 대답은 "ABC (hello (world) how are you)"문자열에서 실패합니다.
제프 앳 우드 (Jeff Atwood)의 파싱 Html The Cthulhu Way : http://www.codinghorror.com/blog/archives/001311.html을 읽고 손으로 쓴 파서를 사용하거나 (문자열에서 문자를 반복하여 괄호인지 확인하거나 스택을 유지) 사용하거나 문맥 - 자유 언어를 파싱 할 수있는 렉서/파서. "제대로 일치하는 괄호의 언어 :"http://en.wikipedia.org/wiki/Dyck_language
PHP의 정규 표현식은 일반 언어에만 국한되지 않습니다. '\ (([^()] * + | (? R)) * \)'임의로 중첩 된 괄호와 잘 어울립니다. –
좋은 설명 선. 주제에 대한 광범위한 정보 : http://php.net/manual/en/regexp.reference.recursive.php –
$string = "ABC (Test1(even deeper) yes (this (works) too)) outside (((ins)id)e)";
$paren_num = 0;
$new_string = '';
foreach($string as $char) {
if ($char == '(') $paren_num++;
else if ($char == ')') $paren_num--;
else if ($paren_num == 0) $new_string .= $char;
}
$new_string = trim($new_string);
그것은 괄호 계산, 각 문자를 통해 반복하여 작동
은 또한에이 위키 피 디아 문서를 참조하십시오. $paren_num == 0
(모든 괄호 바깥에있는 경우)은 결과 문자열 인 $new_string
에 문자를 추가합니다.
굉장, 고마워요 ^^ – whitesiroi
허용되는 대답은 중첩되지 않은 괄호에 유용합니다. 정규 표현식을 약간 수정하면 중첩 된 괄호에 대해 작업 할 수 있습니다. (레그없이)
$string = "ABC (Test1(even deeper) yes (this (works) too)) outside (((ins)id)e)";
echo preg_replace("/\(([^()]*+|(?R))*\)/","", $string);
대부분의 quik를 방법 :
$str='ABC (TEST)';
echo trim(substr($str,0,strpos($str,'(')));
당신은, 단어의 끝 부분에 공백을 잘라 단지 코드에서 트림 기능을 제거하지 않으려면
.$str ="ABC (Test1)";
echo preg_replace('~\(.*\)~' , "", $str);
와우 : O 빠른 답장! 감사! 그래도 조금 설명해 주시겠습니까? 나는 네가 한 일을 정말로 얻지 못한다. –
당신의 캐릭터 수업에서)를 시도해서는 안됩니다. – mopoke
정규 표현식입니다. hehe를 설명하는 것은 다소 어렵습니다. – metrobalderas