2012-05-26 2 views
0

Я использую это регулярное выражение /\([^\S\n]*(.*)[^\S\n]*\)/, чтобы соответствовать тому, что находится внутри скобок, и оно работает хорошо, за исключением случаев, когда есть конечные пробелы, они соответствуют им.Regex соответствует любому символу, кроме конечных пробелов

В, например (test1 test2) Я хотел бы, чтобы соответствовать test1 test2, но я матч test1 test2_ (я написал подчеркивание, но это отставая пространство).

Любая идея, как удалить это конечное пространство из моего соответствия?

Я использую функцию PHP preg_replace.

+0

Почему вы не просто 'preg_replace ('/ \ s + $ /', '')', прежде чем пытаться соответствовать? (Извините, если синтаксис не совсем прав, я не PHPer.) – tripleee

ответ

0

Попробуйте

/\(\s*([^)]+?)\s*\)/ 

Результат:

$reg = '/\(\s*([^)]+?)\s*\)/'; 

var_dump(preg_replace($reg, '$1', "(test1 test2)")); 

//string(11) "test1 test2" 
+0

Именно то, что я искал. Благодаря! Только один вопрос, что означает знак вопроса, это 0 или один раз? Как он сочетается с +, который равен 1 или более? – umpirsky

+0

@umpirsky: он делает квантификатор ('+') наименьшим возможным совпадением, а не самым длинным (не жадным/ленивым). См. Http://www.regular-expressions.info/repeat.html. –

+0

@umpirsky делает предыдущий '+' неживой. Читайте о жадности здесь http://www.regular-expressions.info/repeat.html – Esailija

1

Как просто привязать выражение к концу вашего текста?

/\([^\S\n]*(.*)[^\S\n]*\)$/ 
         ^

Без пробелов после \).

+0

Я получаю те же результаты с вашим регулярным выражением. Вы можете протестировать его здесь http://php.umpirsky.com/. Функция: 'preg_replace', regex:'/\ ([^ \ S \ n] * (. *) [^ \ S \ n] * \) $/', заменить:' \ 1', subject: '(test1 test2) '. Он дает 'test1 test2' с пробелом в конце, который я хочу удалить. Благодарю. – umpirsky

+0

Почему бы вам не обрезать его? –

Смежные вопросы