java 正则表达式用法(1)

//模式类:用来表示一个编译过的正则表达式
import java.util.regex.Pattern;
//匹配类:用模式匹配一个字符串所表达的抽象结果
import java.util.regex.Matcher;


/*
正则表达式通用匹配符号:
.     匹配任何单个字符
^xx   在开头匹配正则xx
xx$   在结尾匹配正则xx
[ab]  能够匹配字母a或b
[^ab] 匹配除了a,b或c之外的任意字符
a|b   匹配a或b

正则表达式元字符:
\d    任意数字,等同于[0-9]
\D    任意非数字,等同于[^0-9]
\s    任意空白字符,等同于[\t\n\x0B\f\r]
\S    任意非空白字符,等同于[^\s]
\w    任意英文字符,等同于[a-zA-Z_0-9]
\W    任意非英文字符,等同于[^\w]
\b    单词边界
\B    非单词边界

正则表达式量词:
贪婪    勉强     侵占     说明
x?      x??      x?+      x出现0次或1次
x*      x*?      x*+      x出现0次或多次
x+      x+?      x++      x出现1次或多次
x{n}    x{n}?    x{n}+    x正好出现n次
x{n,}   x{n,}?   x{n,}+   x至少出现n次
x{n,m}  x{n,m}?  x{n,m}+  x出现至少n次但不多于m次
区别:
1、贪婪:最长匹配,读入整个输入的字符串,来优先尝试第一次匹配,如果第一次尝试匹配(对于整个输入的字符串)失败,匹配器会通过回退整个字符串的一个字符再一次进行尝试,不断地进行处理直到找
到一个匹配,或者左边没有更多的字符来用于回退了。赖于在表达式中使用的量词,最终它将尝试地靠着1 或 0 个字符的匹配。
2、勉强:最少匹配,采用相反的途径:从输入字符串的开始处开始,因此每次勉强地吞噬一个字符来寻找匹配,最终它们会尝试整个输入的字符串。
3、侵占:始终是吞掉整个输入的字符串,尝试着一次(仅有一次)匹配。不像贪婪量词那样,侵占量词绝不会回退,即使这样做是允许全部的匹配成功。

*/



public class RegexDemo {
  public static void main(String arg[]) {
 
      //快速检查模式是否表示给定的输入字符串
      System.out.println(Pattern.matches("\\d","123"));
      System.out.println(Pattern.matches("\\d*","123"));
/*
false
true
*/
   
      //判断字符串是不是数字
      Pattern p1 = Pattern.compile("^[1-9]+\\d*$");
      Matcher m1 = p1.matcher("123"); 
      System.out.println(m1.matches());     
/*
true
*/

       //分割字符串
       Pattern p2 = Pattern.compile("[,;]+"); 
       String[] items = p2.split("a,b,c;1,2"); 
       for(String s : items) { 
            System.out.println(s); 
        } 
/*
a
b
c
1
2
*/

       Pattern p3 = Pattern.compile("\\d");
       Matcher m3 = p3.matcher("abc123def456hgx");
       //替换第一个符合正则的字符为指定字符
       System.out.println(m3.replaceFirst("%"));
       //替换所有符合正则的字符为指定字符
       System.out.println(m3.replaceAll("%"));
/*
abc%23def456hgx
abc%%%def%%%hgx
*/
      

      //查找匹配的字符:贪婪
      Pattern p4 = Pattern.compile("X+"); 
      Matcher m4 = p4.matcher("X XX XXX");    
      while(m4.find()){
         System.out.println(m4.group());  
      } 
/*
X
XX
XXX
*/
      //查找匹配的字符:勉强
      Pattern p5 = Pattern.compile("X+?"); 
      Matcher m5 = p5.matcher("X XX XXX");    
      while(m5.find()){ 
         System.out.println(m5.group());  
      } 
/*
X
X
X
X
X
X
*/
      //查找匹配的字符:侵占
      Pattern p6 = Pattern.compile("X++"); 
      Matcher m6 = p6.matcher("X XX XXX");    
      while(m6.find()){ 
         System.out.println(m6.group());  
      } 
/*
X
XX
XXX
*/

  }
}


深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值