2

我想检查一个字符串是否由一组条件组成:

体育

let myvar = '.....'  
if myvar doesn't contain:   

- 'cos'
- or 'sin'
- or 'tan'
- or 'log'
- or only contains of this: [0-9*/:-+<space>]
- or ... etc 

give an error message.

我想将所有条件放在一个列表中并检查字符串是否具有这些条件之一。
如果字符串没有这些条件之一,则给出错误消息。

谁能帮我找到正确的正则表达式?

4

2 回答 2

3

我建议这个match()功能

function! Test(s)
    if match(a:s, '\<\(cos\|sin\|tan\|log\)\>') < 0
        echo "functions not matched"
    endif
    if match(a:s, '^[0-9*\\\/:+\- ]*$') >= 0
        echo "only numerics and operators"
    endif
endf

希望这个使用示例有所帮助。测试它

:call Test('123 * 38 - 04 : 7 + 1269')
:call Test('biological')
:call Test('log(x)')
于 2012-05-07T10:49:52.123 回答
2

您可以检查相反的情况:

^.*\(cos\|sin\|tan\|log\|[^0-9*\/:+ -]\)

如果在字符串中可以找到至少一个 term等或至少一个除 , etc. 之外的字符cos,则匹配。sin0-9*

因此,如果字符串仅包含字符0-9*\/:+ -和/或不包含您提到的任何关键字,则无法匹配。

于 2012-05-07T09:24:29.263 回答