繁体   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