更新:根据有关我的问题含糊不清的评论,我已经增加了问题的细节。
(术语:用语言来指代任何一系列字母数字字符。)
我正在寻找一个正则表达式来匹配以下内容,逐字:
我想匹配以下内容,但不是逐字逐句,而是删除撇号:
'foo'
将与foo
匹配。foo''bar
将与foo
和bar
匹配。''foo
将与foo
和''foo''
与foo
匹配。实施例 这些将是逐字匹配的:
'bout
it's
persons'
但这些将被忽略:
'
''
并且,对于'open'
,open
将匹配。
答案 0 :(得分:20)
(?=.*\w)^(\w|')+$
'bout # pass
it's # pass
persons' # pass
' # fail
'' # fail
NODE EXPLANATION
(?= look ahead to see if there is:
.* any character except \n (0 or more times
(matching the most amount possible))
\w word characters (a-z, A-Z, 0-9, _)
) end of look-ahead
^ the beginning of the string
( group and capture to \1 (1 or more times
(matching the most amount possible)):
\w word characters (a-z, A-Z, 0-9, _)
| OR
' '\''
)+ end of \1 (NOTE: because you're using a
quantifier on this capture, only the LAST
repetition of the captured pattern will be
stored in \1)
$ before an optional \n, and the end of the
string
答案 1 :(得分:3)
/('\w+)|(\w+'\w+)|(\w+')|(\w+)/
答案 2 :(得分:1)
这个怎么样?
'?\b[0-9A-Za-z']+\b'?
编辑:以前的版本不包括两侧的撇号。
答案 3 :(得分:0)
我提交了第二个回答,因为看起来这个问题已经发生了很大的变化,我之前的回答已经不再有效了。无论如何,如果列出所有条件,请尝试:
(((?<!')')?\b[0-9A-Za-z]+\b('(?!'))?|\b[0-9A-Za-z]+('[0-9A-Za-z]+)*\b)
答案 4 :(得分:0)
这很好用
('*)(?:'')*('?(?:\w+'?)+\w+('\b|'?[^']))(\1)
这个数据没问题
'bou
it's
persons'
'open'
open
foo''bar
''foo
bee''
''foo''
'
''
对这些数据你应该去掉结果(从匹配中删除空格)
'bou it's persons' 'open' open foo''bar ''foo ''foo'' ' ''
(在监管机构中测试,结果为2美元)