대괄호로 된 태그 사이에 텍스트를 가져 오려고합니다.사용자 정의 문자열 태그에 복잡한 정규식
단순한 문자열의 예를 보자 :
[프랑스]이 프랑스 텍스트이다/프랑스] [영어] 이것은 PHP에서 다음 [/ 영어]
그리고 영어 텍스트입니다 (https://stackoverflow.com/a/9826656/962734 사용) :
private function translate($string)
{
$start = "[".$this->lang."]";
$end = "[/".$this->lang."]";
$string = " ".$string;
$ini = strpos($string,$start);
if ($ini == 0) return $string;
$ini += strlen($start);
$len = strpos($string,$end,$ini) - $ini;
return substr($string,$ini,$len);
}
더 복잡한 솔루션은 어떨까요?
언어가 설정되지 않은 경우 -> 기본값 (영어)을 사용합니다. 문자열에 태그 외부에 문자열이 포함되어 있으면 선택한 언어로 표시됩니다. . 문자열이 아닌 요청 언어가 포함 된 경우 -> 디스플레이 기본을 기본 설정되지 않은 경우 (또는, 디스플레이가 먼저 문자열에서 발견 예 : PHP를 사용하여 할 수있는 가장 좋은 방법은 무엇
$this->language->__set("defLang", "english");
$str = "This is a [french]French text[/french][english]English text[/english]";
$this->language->lang = "french";
return $this->language->translate($str);
//OUTPUT: This is a French text
$str = "This is a [deutch]Deutch text[/deutch][english]English text[/english]";
$this->language->lang = "french";
return $this->language->translate($str);
//OUTPUT: This is a English text
$str = "This is a [french]French text[/french][deutch]Deutch text[/deutch]";
$this->language->lang = "english";
return $this->language->translate($str);
//OUTPUT: This is a French text
내가 의심? 이 복잡한 정규식이 필요하다고 내가 정규식에 익숙하지 않은 해요로,하지만, 내가 다른 방법이 있는지 알고 싶습니다
편집 :. 제프 (https://stackoverflow.com/a/17727494/962734)에서 제공하는 답변에 따라
, 대부분의 경우 작동하는 함수를 만들었습니다. 감사.
function translate($text)
{
$exp = '/(\[(.+?)\])(.+?)\[\/.+?\]/i';
$m = preg_match_all($exp, $text, $matches);
if($m){
$mtchs = $matches[0];
$langs = $matches[2];
$texts = $matches[3];
$c = 0;
$foundLang = false;
$foundFirstOptionalLang = false;
foreach($langs as $l){
if($l == $this->lang){
$text = str_replace($mtchs[$c], $texts[$c], $text);
$foundLang = true;
}else{
if(!$foundFirstOptionalLang && $l == $this->defLang){
$optionalText = str_replace($mtchs[$c], $texts[$c], $text);
$foundFirstOptionalLang = true;
}
$text = str_replace($mtchs[$c], "", $text);
}
$c++;
}
if (!$foundLang) $text = $optionalText;
}
return $text;
}
텍스트의 유일하게 가능한 형식인가요? 그들은 항상 서로 옆에 있고 한 줄에 하나만있을 것입니까? – SmokeyPHP
아닙니다. 이것들은 문자열이 어떻게 보일지에 대한 예일뿐입니다. –