VB.NET的正则表达式
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VB.NET的正则表达式相关的知识,希望对你有一定的参考价值。
我现在要在VB.NET C/S模式中判断文本框中输入的有没有包含单引号或双引号的的正则表达式。
请高手帮我写出这条语句,本人初学还请写清楚具体用法!~ 谢谢!~
dim isTrue as boolean = regex.Match(textbox1.text, _
"(.*\x22.*\x22.*)|(.*\x27.*\x27.*)").Success
' 可匹配形如:"5648ffq" ,'454564565', 35235"ere"333, 434'ppp'89eru 等
'如果要匹配中文的“”、‘’
'改为:"(.*\u201C.*\u201D.*)|(.*\u2018.*\u2019.*)" 参考技术A 添加个RegularExpressionValidator
把RegularExpressionValidator1的ValidationExpression设置为[^',"]*
然后把RegularExpressionValidator1的controltovalidate 设置为textbox1(你要判断的文本框)
RegularExpressionValidator1的errormessage设置为 包含'或"字符
如果是C/S模式的话通过验证控件来做会简单点 参考技术B 用instr函数 字符串匹配
对于 VB.NET 中二维数组上的每个循环
【中文标题】对于 VB.NET 中二维数组上的每个循环【英文标题】:For Each loop on a 2D array in VB.NET 【发布时间】:2011-12-07 20:55:06 【问题描述】:我正在编写一个循环来遍历 2D 循环的第一个数组,我目前有这样的:
For Each Dir_path In MasterIndex(, 0)
'do some stuff here
Next
但它给了我一个错误,说它需要第一个字段中的表达式。但这就是我想要做的,遍历第一个字段。我该如何解决?我会在里面放什么?
编辑:澄清一下,我专门寻找每个数组的子数组中的第 0 个元素,这就是为什么第二个字段始终为 0。
【问题讨论】:
我更新了这两个示例,以满足您更详细的要求 【参考方案1】:您可以使用嵌套的 For 循环来完成此操作
注意:当使用 For Each 循环迭代数组中的元素时,每次迭代生成的占位符是实际数组中值的副本。对该值的更改不会反映在原始数组中。如果你想做除了阅读信息之外的任何事情,你需要使用 For 循环来直接寻址数组元素。
假设一个二维数组,下面的代码示例将为每个维度中的每个元素分配一个值。
Dim MasterIndex(5, 2) As String
For iOuter As Integer = MasterIndex.GetLowerBound(0) To MasterIndex.GetUpperBound(0)
'iOuter represents the first dimension
For iInner As Integer = MasterIndex.GetLowerBound(1) To MasterIndex.GetUpperBound(1)
'iInner represents the second dimension
MasterIndex(iOuter, iInner) = "This Isn't Nothing" 'Set the value
Next 'iInner
'If you are only interested in the first element you don't need the inner loop
MasterIndex(iOuter, 0) = "This is the first element in the second dimension"
Next 'iOuter
'MasterIndex is now filled completely
您可以选择使用.Rank
属性来动态迭代每个维度
如果您想像 Konrad Rudolph 建议的那样遍历锯齿状数组(这在功能上更接近于其他类型更松散的语言(如 PHP)中的数组实现),您可以这样做:
'This is a jagged array (array of arrays) populated with three arrays each with three elements
Dim JaggedIndex()() As String =
New String() "1", "2", "3",
New String() "1", "2", "3",
New String() "1", "2", "3"
For Each aOuter As String() In JaggedIndex
'If you are only interested in the first element you don't need the inner for each loop
Dim sDesiredValue As String = aOuter(0) 'This is the first element in the inner array (second dimension)
For Each sElement As String In aOuter
Dim sCatch As String = sElement 'Assign the value of each element in the inner array to sCatch
sElement = "This Won't Stick" 'This will only hold value within the context of this loop iteration
Next 'sElement
Next 'aOuter
'JaggedIndex is still the same as when it was declared
【讨论】:
【参考方案2】:你根本做不到。 .NET 框架基础结构并不真正支持多维数组。它们似乎被贴上了事后的标签。最好的解决方案通常是不使用它们,而是使用锯齿状数组(数组的数组 - Integer()()
而不是 Integer(,)
)。
【讨论】:
所以我把它改成了MasterIndex()()
,但是当我用For Each Dir_path In MasterIndex()(0)
替换For Each Dir_path In MasterIndex(, 0)
时,我得到Number of indices is less than number of dimensions of the indexed array
?
@Tim 该语法根本无效。使用For Each x In MasterIndex … DirPath = x(0)
并从那里开始工作……【参考方案3】:
您可以递归地使用Enumerable.Range 来迭代数组的维度。
假设我们有一个 Int 的二维网格(行和列)。
我们可以这样迭代:
using System.Linq;
[TestMethod]
public void TestTwoDimensionalEnumeration()
int rowcount = 9;
int columncount = 9;
int[,] grid = new int[rowcount, columncount];
var enumerated =
Enumerable.Range(0, rowcount - 1).
SelectMany(ri => Enumerable.Range(0, columncount - 1).
Select(ci => new
RowIndex = ri,
ColumnIndex = ci,
Value = grid[ri,ci]
));
foreach (var item in enumerated)
System.Diagnostics.Trace.WriteLine("Row:" + item.RowIndex +
",Column:" + item.ColumnIndex +
",Value:" + item.Value);
同样的逻辑可以应用于任意数量的维度。
【讨论】:
以上是关于VB.NET的正则表达式的主要内容,如果未能解决你的问题,请参考以下文章
如何使用正则表达式匹配从 xml 文件中搜索和替换包含占位符标记的文本。 VB.net 或 C#