确定正则表达式中匹配单词的位置

时间:2011-03-02 01:47:49

标签: sql sql-server regex

情况:

我有一个静态字典和一个动态确定的正则表达式。

正则表达式在这里的应用程序中受到限制,因为我永远不会使用代表可变数量字符的符号。

我需要创建一个正则表达式,查找字典中与此类模式匹配的所有单词:(any letter in set: q,w,e,r,t,y,u,i or blank) & (any letter in set: q,w,e,r,t,y,u,i or blank) & (a or blank) & (s or blank) & (and letter in set: q,w or blank) & (d or blank) & (any letter in set: q,w,e or blank)

[q,e,r,t,y,u,i,null][q,e,r,t,y,u,i,null][a,null][s,null][q,w,null][d,null][q,w,e,null]

例如,“rasw”一词有效(假设它在我的字典中)。

问题:

我还需要一条信息,我需要知道这个词是从第二个位置开始的。与在第一个位置开始的有效单词“qra”或从第4个位置开始的有效单词“sqde”相对应。

其他信息:

我打算使用正则表达式.dll在MS SQL SERVER中执行此操作 http://www.codeproject.com/KB/string/SqlRegEx.aspx

另请注意,鉴于上述示例,我不希望“qqqq”成为有效单词,即使它在字典中也是如此。这个词不允许跳过一个空格,但是如果这个场景可以做的话,它就不允许在第一个空格上开始......

谢谢!

1 个答案:

答案 0 :(得分:0)

我非常强烈建议在这里使用CLR。然后在.NET中做你的正则表达式的东西。如果你找到了这个词,你需要做的就是在空格上做.Split(" "),然后在数组中进行迭代,找出它所在的第n个位置。

例如:var myString = "The fat fox is lazy"; (假设你匹配单词“是”) - 所以你知道那里有“是”,现在要找出你能找到的位置:

var _counter = 0;
foreach(var s as string in myString.Split(" "))
{
if(s == "is") { return _counter; }

_counter += 1;
}

希望你能理解我在这里建议的内容。