鍍金池/ 問答/PHP/ 怎么匹配出來一個中英文混雜的字符串里的英文?

怎么匹配出來一個中英文混雜的字符串里的英文?

字符串是從doc文本里取出來的;
比如這樣;

冠捷科技集團

冠捷科技集團成立于1967年,并于1999年10月在香港及新加坡兩地同步上市,為全球最大的個人計算機顯示器及第四大液晶電視制造商。
冠捷早于1990領(lǐng)先業(yè)界在大陸布局,如今已有海內(nèi)外十二大制造基地、七大銷售中心及四大研發(fā)中心。集團更創(chuàng)立自家品牌 AOC 及 Envision ,并分別于2009年及2011年取得飛利浦品牌顯示器及電視在全球及中國的獨家分銷權(quán)。2012年4月,集團與飛利浦成立合資公司TP Vision,接管飛利浦的電視業(yè)務(wù),負責(zé)飛利浦品牌電視在全球主要市場的產(chǎn)品設(shè)計、生產(chǎn)、分銷、推廣及銷售業(yè)務(wù)。2014年6月,TP Vision成為冠捷的全資公司。
目前,集團顯示器主要產(chǎn)品有:智能顯示器,交互式電子白板, 4K * 2K高分辨率顯示器,窄邊框顯示器等;電視主要產(chǎn)品有:4K * 2K高分辨率產(chǎn)品,智能電視、網(wǎng)絡(luò)電視,3D窄邊和纖薄電視產(chǎn)品等。
福建捷聯(lián)電子有限公司為冠捷科技全資子公司,主要從事液晶顯示設(shè)備的研究開發(fā)、生產(chǎn)制造和銷售推廣業(yè)務(wù),產(chǎn)品70%外銷,2014年產(chǎn)值204億元人民幣,出口額22億美元。 

TPV Technology Group was founded in 1967 and has been publicly listed on the Hong Kong & Singapore stock exchanges since October 1999. Now it has become the world’s largest Monitor and fourth-largest LCD TV manufacturer
TPV stayed ahead of competitors to gain a foothold in mainland China as early as in 1990. So far TPV has established 12 manufacturing bases, seven sales centers and four R&D centers.TPV has distributed its products globally under its own brands-AOC and Envision. Since 2009 TPV has been exclusive licensee of the Philips brand for monitors and since 2011 it has sold Philips TVs in China. ?In April, 2012, TPV founded TP Vision as a joint venture together with Philips to take over the latter’s TV business of Design, production, distribution, marketing and selling around the world. Since June, 2014, TPV owns 100% of TP Vision.
Currently, the main products of monitor include Smart Monitor, Interactive Electronic Whiteboard, 3D Entertainment Monitor, 4K*2K High Resolution Monitor, Narrow-Frame Monitor. The main TV products include 4K*2K High Resolution TV, Smart TV, Internet TV, 3D Narrow-Frame and Slim TV.
TPV Electronics (Fujian) Co., Ltd, as a wholly owned subsidiary of TPV Group, specializes in R&D, manufacturing and marketing of display products. Around 70% of products are sold abroad. In 2014, its annual value of production reached 20.4 billion RMB and export exceeded US$ 2.2 billion.

/**
 * 取出所以的中文內(nèi)容;
 *
 * @param string $charset
 * @return bool|string
 */
function getFileDetailCn($charset = 'utf8')
{
    $wordFileDetail = getWordFileDetail();
    if($charset=='gb2312'){
        if(!preg_match_all("/^[".chr(0xa1)."-".chr(0xff)."]+/", $wordFileDetail, $match)){
            return false;
        }
        return implode('',$match[0]);
    }

    if($charset=='utf8'){
        //只能匹配出漢字,不能匹配出標(biāo)點符號
        if(!preg_match_all("/[\x{4e00}-\x{9fa5}]+/u", $wordFileDetail, $match)){
            return false;
        }
        return implode('',$match[0]);
    }
    return false;
}

我目前的做法是,用正則匹配出來中文,然后用str_replace把中文替換成空,就拿到了英文;

但是,在開發(fā)過程中,有兩個問題;
一個是getFileDetailCn這個方法,只能取出所有中文,不能取出標(biāo)點符號,所以到最后replace替換的時候,通過這個方法拿到的字符串,并不能跟原來的字符串匹配到,所以替換不成;

所以,有沒有成熟的方法直接從這個字符串里拿到英文部分呢?


這里的需求是;中文里的數(shù)字,英文,標(biāo)點符號包括空格都要;

英文里的數(shù)字,標(biāo)點符號也要;

兩個最好都是原樣輸出;

回答
編輯回答
薄荷綠

個人覺得,這種整段的文字應(yīng)該有更好的格式的特征.而正則表達式應(yīng)該用在字符特征明確且規(guī)則復(fù)雜的短文字上.
根據(jù)問題給出的例子,我覺得應(yīng)該逐行讀取文本,
第一步,查看行中是否存在中文標(biāo)點符號,如果有,即可判斷為中文行,進入下一行的判斷
第二步,如果沒有中文標(biāo)點,逐字判斷是否為漢字,若發(fā)現(xiàn)漢字則認為是中文行,否則為英文行.
第二步其實沒有必要做完整的遍歷,隨機抽取其中部分字符做判斷段就好了.

2017年8月7日 02:55
編輯回答
未命名

何不直接匹配英文?

(\w+?)
2017年7月16日 17:12
編輯回答
純妹

如果字符串格式一致,分割/\n\n/,或者分割/\n/再拼接

2017年10月14日 03:07
編輯回答
陌南塵

根據(jù)你給的文字結(jié)構(gòu),上面中文下面英文,分隔還是很清楚的,實現(xiàn)起來不難。

preg_match_all("/(?<=\n)\w+[\s\S]+/", $input_lines, $output_array); //返回數(shù)組第0個元素輸出英文
preg_match_all("/[\W\w]+?(?=\n\w+)/", $input_lines, $output_array);;  //返回數(shù)組第0個元素輸出中文
2017年7月5日 11:17
編輯回答
真難過
"/([\w*&\s\.’\-,%\(\)\^\$])+/ims"
2018年2月22日 18:18
編輯回答
祈歡
function deleteCn($charset = 'utf8') {
    if ($charset=='gb2312') {
        $reg = "/^[".chr(0xa1)."-".chr(0xff)."]+/";
    } else if ($charset=='utf8'){
        $reg = "/[\x{4e00}-\x{9fa5}]+/u";
    } else return false;
    return preg_replace($reg, "", getWordFileDetail());
}
2017年6月16日 12:32
編輯回答
使勁操
`/[^a-z0-9,.,。、*\s]/gi`

把不要的東西都刪了唄。`php`怎么刪。。。我好想不會

clipboard.png

2017年12月17日 11:26