PHP: регулярное выражение для удаления текста из строки, если условие выполняется - PullRequest
1 голос
/ 12 июля 2009

У меня есть переменная, содержащая строку. Строка может прийти несколькими способами:

// 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' не найдено), нам нужно получить только первое слово и затем удалить скобки.

Ну, вот и все. Мне просто нужен кто-то, чтобы помочь мне сделать это, потому что я новичок в PHP и не знаю регулярных выражений .... или другого способа сделать это.

Спасибо !!!!

Ответы [ 3 ]

2 голосов
/ 12 июля 2009

на самом деле, нет необходимости в сложном регулярном выражении

$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);
1 голос
/ 12 июля 2009

Попробуйте это регулярное выражение:

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

Это приведет вас либо к первой скобке, либо к первому слову в первой скобке. Вместе с preg_match:

preg_match('/(?:^[^(]+|(?<=^\\()[^\\s)]+)/', $var, $match);
0 голосов
/ 05 января 2010

попробуйте это

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...