我在下面创建了一个正则表达式(使用php);必须与包含 terms
,a-z0-9
,.
和_
的给定字符串中的所有-
匹配。
我的表达是:'~(?:\(|\s{0,},\s{0,})([a-z0-9._-]+)(?:\s{0,},\s{0,}|\))$~i'
。
我的目标字符串为:('word', word.2, a_word, another-word)
。
结果中的预期terms
为:word.2
,a_word
,another-word
。
我目前正在:another-word
。
我的目标
我正在从目标字符串中检测MySQL函数,这很好用。然后我想要那个目标字符串中的所有字段。这是我自己的ORM。
我想可能存在这样一种情况,即通过进一步的括号包含在这个表达式中。
答案 0 :(得分:1)
使用正则表达式可能有点矫枉过正。在这种文本中,您可以删除括号并用逗号分解字符串。
答案 1 :(得分:1)
据我所知,你有一个以逗号分隔的术语列表,并希望只找到满足[a-z0-9._\-]+
的术语。如果是这样,这应该是正确的(它至少会为您的示例返回正确的结果):
'~(?<=[,(])\\s*([a-z0-9._-]+)\\s*(?=[,)])~i'
主要问题是:
(?<=...
)和lookahead((?=...
)编辑:由于您在评论中说某些字词可能是包含逗号的字符串,因此您首先要通过此操作输入:
$input = preg_replace('~(\'([^\']+|(?<=\\\\)\')+\'|"([^"]+|(?<=\\\\)")+")~', '"STRING"', $input);
应该用“STRING”替换所有字符串,这样可以很好地匹配其他正则表达式。