>> 'hola(' =~ /\w+[^(]/
=> 0
>> $&
=> "hola"
Насколько я знаю, /\w+[^(]/
должен соответствовать слово не сопровождаемый (
Я также попытался с negative look-behind
и уйти от (
;?. С тем же результаты.Почему это регулярное выражение соответствует/ W + [^ (]/
что я нахожу Estrange об этом, в том, что если я попытаюсь с /a[^(]/
, он работает (как и ожидалось).
>> 'hola(' =~ /a[^(]/
=> nil
так что, безусловно, имеет что-то делать с +
квантора ,
Что происходит?
Я попытался с помощью Ruby 2.2
и Python 3.3
'\ w +' соответствует "hol", а '[^ (]' соответствует «a». –
[String # = ~] (http://ruby-doc.org/core-2.2.0/String. html # method-i-3D-7E) просто говорит вам, есть ли совпадение (и есть ли он, где он начинается). Здесь вам лучше найти *, что * соответствует, если есть совпадение. , используйте [String # [\]] (http://ruby-doc.org/core-2.2.0/String.html#method-i-5B-5D) (или [String # match] (http: // ruby-doc.org/core-2.2.0/String.html#method-i-match)) с регулярным выражением: 'hola ('[/ \ w + [^ (] /] # =>" hola "'. Это приводит вас к объяснению @Chris.Вы получите нужный результат, добавив начало и конец строковых привязок к вашему регулярному выражению: ''hola (' [/^\ w + [^ (] $ /] # => nil'. –