按照${xxx 固定字符串 xxx}$ 提取数据.
采取的提取方式 (contractNo){1} 固定为一个
然后左边和右边都有一个无{和无}的字符串
String desStr = "${sdsfddfs${0=房源序号, 1=序号,contractNo, 2=合同编号, 3=项目名称}$ ${aacontractNoa}$sddssdd}$";
String regex = "\\$\\{[^(\\{\\})]*(contractNo){1}[^(\\{\\})]*\\}\\$"; //这个[^(\\{\\})] 排除不是很好理解修改成[^(\\{\\})]
String regex = "\\$\\{[^(\\{\\})]*(contractNo){1}[^(\\{\\})]*\\}\\$";
String regex = "\\{{1}[^\\{\\}]*?\\}{1}"; //提取{字符串} 格式的字符串
Pattern mPattern = Pattern.compile(regex);
Matcher mMatcher = mPattern.matcher(desStr);
//System.out.println("\n");
int j=0;
while (mMatcher.find()) {
j++;
System.out.println("====ok==="+j);
System.out.println(mMatcher.group());
}
------------正则表达式贪婪与非贪婪模式
----------
之前做程序的时候看到过正则表达式的贪婪与非贪婪模式,今天用的时候就想不起来了,现在这里总结一下,以备自己以后用到注意。
1.什么是正则表达式的贪婪与非贪婪匹配
如:String str="abcaxc";
Patter p="ab*c";
贪婪匹配:正则表达式一般趋向于最大长度匹配,也就是所谓的贪婪匹配。如上面使用模式p匹配字符串str,结果就是匹配到:abcaxc(ab*c)。
非贪婪匹配:就是匹配到结果就好,就少的匹配字符。如上面使用模式p匹配字符串str,结果就是匹配到:abc(ab*c)。
2.编程中如何区分两种模式
默认是贪婪模式;在量词后面直接加上一个问号?就是非贪婪模式。
量词:{m,n}:m到n个
*:任意多个
+:一个到多个
?:0或一个
3.程序实例
使用Snort的规则一条规则的一部分作为匹配文本,匹配出其中的content部分。
1 import java.util.regex.Matcher; 2 import java.util.regex.Pattern; 3 4 public class RegularTest { 5 6 public static void main(String[] arg){ 7 String text="(content:\"rcpt to root\";pcre:\"word\";)"; 8 String rule1="content:\".+\""; //贪婪模式 9 String rule2="content:\".+?\""; //非贪婪模式 10 11 System.out.println("文本:"+text); 12 System.out.println("贪婪模式:"+rule1); 13 Pattern p1 =Pattern.compile(rule1); 14 Matcher m1 = p1.matcher(text); 15 while(m1.find()){ 16 System.out.println("匹配结果:"+m1.group(0)); 17 } 18 19 System.out.println("非贪婪模式:"+rule2); 20 Pattern p2 =Pattern.compile(rule2); 21 Matcher m2 = p2.matcher(text); 22 while(m2.find()){ 23 System.out.println("匹配结果:"+m2.group(0)); 24 } 25 } 26 }
相关推荐
1. **IndexOf**:此方法用于查找指定字符串在当前字符串中的第一次出现位置。返回值是子字符串的起始索引,如果未找到则返回-1。 2. **Substring**:根据提供的起始索引和长度,截取字符串的一部分。 例如,假设...
提取指定字符串内容则可以通过`IndexOf()`、`Substring()`以及正则表达式`Matches()`等方法实现。理解并熟练运用这些方法,可以有效地解决字符串处理的问题。在实际项目中,根据具体需求选择合适的方法至关重要。
其语法为Match(string, textpattern),其中string是指定要检查是否匹配指定模式的字符串,textpattern是指定文本匹配模式。返回值为一个布尔值,如果字符串string与模式textpattern相匹配,则函数返回TRUE,否则返回...
然而,在某些复杂场景下,这些基础函数可能无法满足需求,例如需要截取两个标记之间的内容,或者需要在字符串中寻找多个特定模式。此时,自定义类就能派上用场,它可以通过封装复杂的逻辑,提供更高级别的抽象。 该...
在C#编程中,有时我们需要从字符串中提取特定位置或模式的数据,这通常可以通过使用正则表达式来实现。正则表达式是一种强大的文本处理工具,可以用来匹配、查找、替换和提取字符串中的模式。本篇文章将深入探讨如何...
使用正则表达式可以精确地提取字符串中的特定模式。`re.match()`或`re.search()`用于查找匹配的开始,`re.findall()`则用于找到所有匹配的部分。 4. JSON或XML解析: 在处理结构化数据时,如JSON或XML,需要使用...
这个PHP类设计的目标是截取两个指定字符串之间的子串。类可能包含以下主要方法: - `__construct()`: 构造函数,可能用于初始化类的属性,如起始和结束标识符。 - `setStartStr()`: 设置起始字符串。 - `...
本文将详细介绍如何在JavaScript中使用正则表达式进行字符串的模式匹配、提取以及替换。 #### 二、基本概念 正则表达式是一种由字符和特殊符号组成的语言,用于描述字符串的模式。在JavaScript中,正则表达式的创建...
`Regex.IsMatch(input, pattern)`判断输入字符串是否匹配指定模式。 4. 搜索与提取:`Regex.Match()`、`Regex.Matches()`和`Regex.Split()`分别用于查找第一个匹配项、所有匹配项以及根据模式分割字符串。 5. 替换...
### 提取字符串中URL域名的方法解析 在互联网应用开发中,经常需要从一段文本或数据中提取出URL中的域名部分。这种需求常见于链接管理、网络安全检查、网站数据分析等多个领域。本文将详细介绍如何通过正则表达式的...
该函数的语法为 Match(string, textpattern),其中 string 是要检查是否匹配指定模式的字符串,textpattern 是指定的文本匹配模式。函数执行成功时如果字符串 string 与模式 textpattern 相匹配,则函数返回 TRUE,...
本段VB代码实现了一个功能:在给定的字符串(`instring`)中查找位于指定前缀(`after`)与后缀(`before`)之间的子字符串。该函数允许用户设定是否从字符串的开头重新开始搜索(`rewind`)。此功能适用于需要从...
3. **提取字符串中指定字符间的子串**: 提取特定字符之间的子串通常需要用到分隔符。例如,如果字符串是 "key1=value1;key2=value2",我们想要提取 "value1" 和 "value2",可以使用 `split()` 方法,以分号或等号...
- 正则表达式是一种模式匹配工具,用于字符串搜索、替换和提取。Java中的`Pattern`和`Matcher`类用于处理正则表达式。 - `Pattern.compile(regex)`编译正则表达式为模式对象,`Matcher`对象通过`Pattern`对象的`...
`strsplit`函数是最常用的一种,它可以根据指定的分隔符将字符串拆分成多个子字符串。例如,如果你有一个由逗号分隔的字符串 'a,b,c',你可以通过`strsplit('a,b,c', ',')`将其拆分为{'a' 'b' 'c'}。若无分隔符,它...
正则表达式是指用来描述字符串模式的表达式,通过使用正则表达式,我们可以轻松地实现字符串的匹配、验证、提取和替换等操作。在 C# 中,我们可以使用 System.Text.RegularExpressions 命名空间中的 Regex 类来实现...
2. **正则表达式(Regular Expression)**:在处理字符串时,正则表达式是一种强大的工具,用于匹配、查找、替换符合特定模式的字符串。例如,要提取所有汉字,我们可以使用匹配汉字的正则表达式`\p{Han}`;要提取...
`substr()` 用于从字符串中提取指定长度的部分。例如,`substr(string, start_position, length)` 返回从`start_position`开始,长度为`length`的子串。结合`instr()`,可以逐个截取字符串的不同部分。 3. **...
`replace()` 方法用于替换字符串中的某个模式(可以是字符串或正则表达式)。 ```javascript var result1 = a.replace(re, "Hello"); // result1 的值为 "Hello" var result2 = b.replace(re, "Hello"); // result2 ...