我正在尝试编写一个正则表达式,用于生成不在括号或括号中的字符串中的内容.括号总是一年,括号可以包含任何普通字符,大写和小写.我通过查找括号和括号然后[^\regex]来逃避它(这是对的吗?)
这是字符串:
s = 'Some words (1999) [THINGS]
Run Code Online (Sandbox Code Playgroud)
和正则表达式:
/[^(\(\d{4}\))|\[.*\]]/
Run Code Online (Sandbox Code Playgroud)
但这包括括号内的字符见(http://rubular.com/r/bbpcnnGgCI)
一切正常,直到添加[^\regex]
例如,这可以得到(1999):
>> puts s.match(/\(\d{4}\)/)
(1999)
Run Code Online (Sandbox Code Playgroud)
以及括号中的内容:
>> puts s.match(/\[.*\]/)
[THINGS]
Run Code Online (Sandbox Code Playgroud)
但是使用|将它们放在一起 为"或":
>> puts s.match(/\(\d{4}\)|\[.*\]/)
(1999)
Run Code Online (Sandbox Code Playgroud)
...它只是匹配括号及其内容.
这里发生了什么?
我在这做错了什么?
尝试这个/\(.+/将匹配从开头(开始的所有内容.如果你把它剥掉了,那么你'Some words'应该得到你需要的东西吗?
两点
(在字符串中出现任何可能性,则需要更复杂的东西.顺便说一句,在尝试提出正则表达式模式时,我觉得这很有价值.
编辑此模式应仅匹配括号中的内容,即使字符串中较早出现杂散括号也是如此.
string.gsub(/(\(|\[).+(\)|\])/, '')
Run Code Online (Sandbox Code Playgroud)