簡體   English   中英

PHP:如果條件為true,則正則表達式可從字符串中刪除文本

[英]PHP: Regular Expression to delete text from a string if condition is true

我有一個包含字符串的變量。 字符串可以通過幾種方式出現:

// some examples of possible string
$var = 'Tom Greenleaf (as John Dunn Hill)'
// or
$var = '(screenplay) (as The Wibberleys) &'
// or
$var = '(novella "Four Past Midnight: Secret Window, Secret Garden")'

我需要清理字符串以僅獲取第一個元素。 像這樣:

$var = 'Tom Greenleaf'
$var = 'screenplay'
$var = 'novella'

我知道這有點復雜,但是我們可以使用一種模式。

查看第一個變量,我們首先可以檢查字符串是否包含文本'(as.。如果是,那么我們需要刪除'(as'以及之后的所有內容。

在第二個變量中,我們在第一個變量中制定的規則也適用。 我們只需要刪除括號即可。

在第三個變量中,如果未找到'(as),我們只需要獲取第一個單詞,然后刪除括號即可。

好吧,這一切。 我只需要一個人來幫助我完成此任務,因為我是PHP的新手,並且我不知道正則表達式...。

謝謝!!!!

實際上,不需要復雜的正則表達式

$var = 'Tom Greenleaf (as John Dunn Hill)';
$var = '(novella "Four Past Midnight: Secret Window, Secret Garden")';
$var = '(screenplay) (as The Wibberleys) &';
if (  strpos($var,"(as") !== FALSE ){
    # get position of where (as is
    $ind =  strpos($var,"(as");    
    $result = substr($var,0,$ind);        
}else {
    # if no (as, split on spaces and get first element
    $s = preg_split("/\s+/",$var);    
    $result = $s[0];
}      
print  preg_replace( "/\(|\)/","",$result);

試試這個正則表達式:

(?:^[^(]+|(?<=^\()[^\s)]+)

這將使您達到第一個括號之前的任何內容或第一個括號內的第一個單詞。 連同preg_match

preg_match('/(?:^[^(]+|(?<=^\\()[^\\s)]+)/', $var, $match);

試試這個

^\\((?<MATCH>[^ )]+)|^(?<MATCH>[^ ]+)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM