「java非捕获组」java正则捕获组

博主:adminadmin 2022-11-26 16:14:08 41

今天给各位分享java非捕获组的知识,其中也会对java正则捕获组进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

Java 异常 分类 术语 总结

线程死锁什么都不抛出,也不是Error。

其它说法都可以。实际上用不着起那么多名字迷惑自己。

Throwable下面有两个类Error和Exception

Exception下面有一堆类,特殊的是RuntimeException

Error和RuntimeException不需要显式处理。

用Java正则表达式来过滤Excle格式。比如Excle文件格式有.xlsx”和.xls两种。那么正则表达式怎么写呢。

package com.landray.kmss.sys.webservice.client;

import java.util.regex.Matcher;

import java.util.regex.Pattern;

public class Test {

/**

* b解释下:^(?:\\w+\\.xlsx|\\w+\\.xls)$/bbr

* ^$代表开始和结束位置br

* (?:)代表非捕获组(提高捕获速度)br

* \w+代表最少有一个任何一个字母或者数字或者下划线,最多不限制br

* @param args

* @throws Exception

*/

public static void main(String[] args) throws Exception {

// 表达式对象

Pattern p = Pattern.compile("^(?:\\w+\\.xlsx|\\w+\\.xls)$");

// 创建 Matcher 对象

Matcher m = p.matcher("sdfa_1.xlsx");

// 是否完全匹配

System.out.println(m.matches());;

}

}

java正则表达式中[&&]用法

建议自己查J2SE 的 API java.util.regex Pattern

×××××××××××××××××××××××××××××××××××××××××××××

我给你贴出来

×××××××××××××××××××××××××××××××××××××××××××××

public final class Patternextends Objectimplements Serializable正则表达式的编译表示形式。

指定为字符串的正则表达式必须首先被编译为此类的实例。然后,可将得到的模式用于创建 Matcher 对象,依照正则表达式,该对象可以与任意字符序列匹配。执行匹配所涉及的所有状态都驻留在匹配器中,所以多个匹配器可以共享同一模式。

因此,典型的调用顺序是

Pattern p = Pattern.compile("a*b");

Matcher m = p.matcher("aaaaab");

boolean b = m.matches();在仅使用一次正则表达式时,可以方便地通过此类定义 matches 方法。此方法编译表达式并在单个调用中将输入序列与其匹配。语句

boolean b = Pattern.matches("a*b", "aaaaab");等效于上面的三个语句,尽管对于重复的匹配而言它效率不高,因为它不允许重用已编译的模式。

此类的实例是不可变的,可供多个并发线程安全使用。Matcher 类的实例用于此目的则不安全。

正则表达式的构造摘要

构造 匹配

字符

x 字符 x

\\ 反斜线字符

\0n 带有八进制值 0 的字符 n (0 = n = 7)

\0nn 带有八进制值 0 的字符 nn (0 = n = 7)

\0mnn 带有八进制值 0 的字符 mnn(0 = m = 3、0 = n = 7)

\xhh 带有十六进制值 0x 的字符 hh

\uhhhh 带有十六进制值 0x 的字符 hhhh

\t 制表符 ('\u0009')

\n 新行(换行)符 ('\u000A')

\r 回车符 ('\u000D')

\f 换页符 ('\u000C')

\a 报警 (bell) 符 ('\u0007')

\e 转义符 ('\u001B')

\cx 对应于 x 的控制符

字符类

[abc] a、b 或 c(简单类)

[^abc] 任何字符,除了 a、b 或 c(否定)

[a-zA-Z] a 到 z 或 A 到 Z,两头的字母包括在内(范围)

[a-d[m-p]] a 到 d 或 m 到 p:[a-dm-p](并集)

[a-z[def]] d、e 或 f(交集)

[a-z[^bc]] a 到 z,除了 b 和 c:[ad-z](减去)

[a-z[^m-p]] a 到 z,而非 m 到 p:[a-lq-z](减去)

预定义字符类

. 任何字符(与行结束符可能匹配也可能不匹配)

\d 数字:[0-9]

\D 非数字: [^0-9]

\s 空白字符:[ \t\n\x0B\f\r]

\S 非空白字符:[^\s]

\w 单词字符:[a-zA-Z_0-9]

\W 非单词字符:[^\w]

POSIX 字符类(仅 US-ASCII)

\p{Lower} 小写字母字符:[a-z]

\p{Upper} 大写字母字符:[A-Z]

\p{ASCII} 所有 ASCII:[\x00-\x7F]

\p{Alpha} 字母字符:[\p{Lower}\p{Upper}]

\p{Digit} 十进制数字:[0-9]

\p{Alnum} 字母数字字符:[\p{Alpha}\p{Digit}]

\p{Punct} 标点符号:!"#$%'()*+,-./:;?@[\]^_`{|}~

\p{Graph} 可见字符:[\p{Alnum}\p{Punct}]

\p{Print} 可打印字符:[\p{Graph}\x20]

\p{Blank} 空格或制表符:[ \t]

\p{Cntrl} 控制字符:[\x00-\x1F\x7F]

\p{XDigit} 十六进制数字:[0-9a-fA-F]

\p{Space} 空白字符:[ \t\n\x0B\f\r]

java.lang.Character 类(简单的 java 字符类型)

\p{javaLowerCase} 等效于 java.lang.Character.isLowerCase()

\p{javaUpperCase} 等效于 java.lang.Character.isUpperCase()

\p{javaWhitespace} 等效于 java.lang.Character.isWhitespace()

\p{javaMirrored} 等效于 java.lang.Character.isMirrored()

Unicode 块和类别的类

\p{InGreek} Greek 块(简单块)中的字符

\p{Lu} 大写字母(简单类别)

\p{Sc} 货币符号

\P{InGreek} 所有字符,Greek 块中的除外(否定)

[\p{L}[^\p{Lu}]] 所有字母,大写字母除外(减去)

边界匹配器

^ 行的开头

$ 行的结尾

\b 单词边界

\B 非单词边界

\A 输入的开头

\G 上一个匹配的结尾

\Z 输入的结尾,仅用于最后的结束符(如果有的话)

\z 输入的结尾

Greedy 数量词

X? X,一次或一次也没有

X* X,零次或多次

X+ X,一次或多次

X{n} X,恰好 n 次

X{n,} X,至少 n 次

X{n,m} X,至少 n 次,但是不超过 m 次

Reluctant 数量词

X?? X,一次或一次也没有

X*? X,零次或多次

X+? X,一次或多次

X{n}? X,恰好 n 次

X{n,}? X,至少 n 次

X{n,m}? X,至少 n 次,但是不超过 m 次

Possessive 数量词

X?+ X,一次或一次也没有

X*+ X,零次或多次

X++ X,一次或多次

X{n}+ X,恰好 n 次

X{n,}+ X,至少 n 次

X{n,m}+ X,至少 n 次,但是不超过 m 次

Logical 运算符

XY X 后跟 Y

X|Y X 或 Y

(X) X,作为捕获组

Back 引用

\n 任何匹配的 nth 捕获组

引用

\ Nothing,但是引用以下字符

\Q Nothing,但是引用所有字符,直到 \E

\E Nothing,但是结束从 \Q 开始的引用

特殊构造(非捕获)

(?:X) X,作为非捕获组

(?idmsux-idmsux) Nothing,但是将匹配标志由 on 转为 off

(?idmsux-idmsux:X) X,作为带有给定标志 on - off 的非捕获组

(?=X) X,通过零宽度的正 lookahead

(?!X) X,通过零宽度的负 lookahead

(?=X) X,通过零宽度的正 lookbehind

(?!X) X,通过零宽度的负 lookbehind

(?X) X,作为独立的非捕获组

--------------------------------------------------------------------------------

反斜线、转义和引用

反斜线字符 ('\') 用于引用转义构造,如上表所定义的,同时还用于引用其他将被解释为非转义构造的字符。因此,表达式 \\ 与单个反斜线匹配,而 \{ 与左括号匹配。

在不表示转义构造的任何字母字符前使用反斜线都是错误的;它们是为将来扩展正则表达式语言保留的。可以在非字母字符前使用反斜线,不管该字符是否非转义构造的一部分。

根据 Java Language Specification 的要求,Java 源代码的字符串中的反斜线被解释为 Unicode 转义或其他字符转义。因此必须在字符串字面值中使用两个反斜线,表示正则表达式受到保护,不被 Java 字节码编译器解释。例如,当解释为正则表达式时,字符串字面值 "\b" 与单个退格字符匹配,而 "\\b" 与单词边界匹配。字符串字面值 "\(hello\)" 是非法的,将导致编译时错误;要与字符串 (hello) 匹配,必须使用字符串字面值 "\\(hello\\)"。

字符类

字符类可以出现在其他字符类中,并且可以包含并集运算符(隐式)和交集运算符 ()。并集运算符表示至少包含其某个操作数类中所有字符的类。交集运算符表示包含同时位于其两个操作数类中所有字符的类。

字符类运算符的优先级如下所示,按从最高到最低的顺序排列:

1 字面值转义 \x

2 分组 [...]

3 范围 a-z

4 并集 [a-e][i-u]

5 交集 [a-z[aeiou]]

注意,元字符的不同集合实际上位于字符类的内部,而非字符类的外部。例如,正则表达式 . 在字符类内部就失去了其特殊意义,而表达式 - 变成了形成元字符的范围。

行结束符

行结束符 是一个或两个字符的序列,标记输入字符序列的行结尾。以下代码被识别为行结束符:

新行(换行)符 ('\n')、

后面紧跟新行符的回车符 ("\r\n")、

单独的回车符 ('\r')、

下一行字符 ('\u0085')、

行分隔符 ('\u2028') 或

段落分隔符 ('\u2029)。

如果激活 UNIX_LINES 模式,则新行符是惟一识别的行结束符。

如果未指定 DOTALL 标志,则正则表达式 . 可以与任何字符(行结束符除外)匹配。

默认情况下,正则表达式 ^ 和 $ 忽略行结束符,仅分别与整个输入序列的开头和结尾匹配。如果激活 MULTILINE 模式,则 ^ 在输入的开头和行结束符之后(输入的结尾)才发生匹配。处于 MULTILINE 模式中时,$ 仅在行结束符之前或输入序列的结尾处匹配。

组和捕获

捕获组可以通过从左到右计算其开括号来编号。例如,在表达式 ((A)(B(C))) 中,存在四个这样的组:

1 ((A)(B(C)))

2 \A

3 (B(C))

4 (C)

组零始终代表整个表达式。

之所以这样命名捕获组是因为在匹配中,保存了与这些组匹配的输入序列的每个子序列。捕获的子序列稍后可以通过 Back 引用在表达式中使用,也可以在匹配操作完成后从匹配器检索。

与组关联的捕获输入始终是与组最近匹配的子序列。如果由于量化的缘故再次计算了组,则在第二次计算失败时将保留其以前捕获的值(如果有的话)例如,将字符串 "aba" 与表达式 (a(b)?)+ 相匹配,会将第二组设置为 "b"。在每个匹配的开头,所有捕获的输入都会被丢弃。

以 (?) 开头的组是纯的非捕获 组,它不捕获文本,也不针对组合计进行计数。

关于java正则非捕获组的一些问题

前一个正则是不会捕获任何东西的,但是后面的正则会捕获(\\d{3})这个分组。

(?:)并不是说这个非捕获分组中的其他分组也不捕获。其实你第二个正则的非捕获分组根本就没有任何效果,因为这个地方根本不用分组,不需要小括号,你加非捕获分组就是画蛇添足,而且它也不会影响它内部的其他捕获分组。

你要知道,只有你需要分组的时候才会用到()或者(?:),如果你不需要分组,那就不要用(?:),因为根本没有任何效果。

非法字符验证正则表达式为什么输入中文不能通过?

正则表达式用于字符串处理,表单验证等场合,实用高效,但用到时总是不太把握,以致往往要上网查一番.我将一些常用的表达式收藏在这里,作备忘之用.本贴随时会更新. 匹配中文字符的正则表达式: [\u4e00-\u9fa5] 匹配双字节字符(包括汉字在内):[^\x00-\xff] 应用:计算字符串的长度(一个双字节字符长度计2,ASCII字符计1) String.prototype.len=function(){return this.replace([^\x00-\xff]/g,"aa").length;} 匹配空行的正则表达式:\n[\s| ]*\r 匹配HTML标记的正则表达式:1 匹配首尾空格的正则表达式:(^\s*)|(\s*$) String.prototype.trim = function() return this.replace(/(^\s*)|(\s*$)/g, ""); 利用正则表达式分解和转换IP地址: 下面是利用正则表达式匹配IP地址,并将IP地址转换成对应数值的Javascript程序: function IP2V(ip) re=/(\d+)\.(\d+)\.(\d+)\.(\d+)/g //匹配IP地址的正则表达式 if(re.test(ip)) return RegExp.$1*Math.pow(255,3))+RegExp.$2*Math.pow(255,2))+RegExp.$3*255+RegExp.$4*1 else throw new Error("Not a valid IP address!") 不过上面的程序如果不用正则表达式,而直接用split函数来分解可能更简单,程序如下: var ip="10.100.20.168" ip=ip.split(".") alert("IP值是:"+(ip[0]*255*255*255+ip[1]*255*255+ip[2]*255+ip[3]*1)) 匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)* 匹配网址URL的正则表达式:http://([\w-w-]+(/[\w- 利用正则表达式去除字串中重复的字符的算法程序:[注:此程序不正确,原因见本贴回复] var s="abacabefgeeii" var s1=s.replace(/(.).*\1/g,"$1") var re=new RegExp("["+s1+"]","g") var s2=s.replace(re,"") alert(s1+s2) //结果为:abcefgi 我原来在CSDN上发贴寻求一个表达式来实现去除重复字符的方法,最终没有找到,这是我能想到的最简单的实现方法.思路是使用后向引用取出包括重复的字符,再以重复的字符建立第二个表达式,取到不重复的字符,两者串连.这个方法对于字符顺序有要求的字符串可能不适用. 得用正则表达式从URL地址中提取文件名的javascript程序,如下结果为page1 s=" " s=s.replace(0,ig,"$2") alert(s) 利用正则表达式限制网页表单里的文本框输入内容: 用正则表达式限制只能输入中文:onkeyup="value=value.replace(/[^\u4E00-\u9FA5]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\u4E00-\u9FA5]/g,''))" 用正则表达式限制只能输入全角字符: onkeyup="value=value.replace(/[^\uFF00-\uFFFF]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\uFF00-\uFFFF]/g,''))" 用正则表达式限制只能输入数字:onkeyup="value=value.replace(/[^\d]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))" 用正则表达式限制只能输入数字和英文:onkeyup="value=value.replace(/[\W]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))" 另外从baidu 的知道里边拿到些信息: 正则表达式的构造摘要 构造 匹配 字符 x 字符 x \\ 反斜线字符 \0n 带有八进制值 0 的字符 n (0 = n = 7) \0nn 带有八进制值 0 的字符 nn (0 = n = 7) \0mnn 带有八进制值 0 的字符 mnn(0 = m = 3、0 = n = 7) \xhh 带有十六进制值 0x 的字符 hh \uhhhh 带有十六进制值 0x 的字符 hhhh \t 制表符 ('\u0009') \n 新行(换行)符('\u000A') \r 回车符 ('\u000D') \f 换页符 ('\u000C') \a 报警 (bell) 符('\u0007') \e 转义符 ('\u001B') \cx 对应于 x 的控制符 字符类 [abc] a、b 或c(简单类) [^abc] 任何字符,除了 a、b 或c(否定) [a-zA-Z] a 到z或A到Z,两头的字母包括在内(范围) [a-d[m-p]] a 到d或m到p:[a-dm-p](并集) [a-z[def]] d、e 或f(交集) [a-z[^bc]] a 到z,除了 b 和c:[ad-z](减去) [a-z[^m-p]] a 到z,而非 m 到p:[a-lq-z](减去) 预定义字符类 . 任何字符(与行结束符可能匹配也可能不匹配) \d 数字:[0-9] \D 非数字: [^0-9] \s 空白字符:[ \t\n\x0B\f\r] \S 非空白字符:[^\s] \w 单词字符:[a-zA-Z_0-9] \W 非单词字符:[^\w] POSIX 字符类(仅US-ASCII) \p{Lower} 小写字母字符:[a-z] \p{Upper} 大写字母字符:[A-Z] \p{ASCII} 所有 ASCII:[\x00-\x7F] \p{Alpha} 字母字符:[\p{Lower}\p{Upper}] \p{Digit} 十进制数字:[0-9] \p{Alnum} 字母数字字符:[\p{Alpha}\p{Digit}] \p{Punct} 标点符号: \p{Graph} 可见字符:[\p{Alnum}\p{Punct}] \p{Print} 可打印字符:[\p{Graph}\x20] \p{Blank} 空格或制表符:[ \t] \p{Cntrl} 控制字符:[\x00-\x1F\x7F] \p{XDigit} 十六进制数字:[0-9a-fA-F] \p{Space} 空白字符:[ \t\n\x0B\f\r] java.lang.Character 类(简单的 java 字符类型) \p{javaLowerCase} 等效于 java.lang.Character.isLowerCase() \p{javaUpperCase} 等效于 java.lang.Character.isUpperCase() \p{javaWhitespace} 等效于 java.lang.Character.isWhitespace() \p{javaMirrored} 等效于 java.lang.Character.isMirrored() Unicode 块和类别的类 \p{InGreek} Greek 块(简单块)中的字符 \p{Lu} 大写字母(简单类别) \p{Sc} 货币符号 \P{InGreek} 所有字符,Greek 块中的除外(否定) [\p{L}[^\p{Lu}]] 所有字母,大写字母除外(减去) 边界匹配器 ^ 行的开头 $ 行的结尾 \b 单词边界 \B 非单词边界 \A 输入的开头 \G 上一个匹配的结尾 \Z 输入的结尾,仅用于最后的结束符(如果有的话) \z 输入的结尾 Greedy 数量词 X? X,一次或一次也没有 X* X,零次或多次 X+ X,一次或多次 X{n} X,恰好 n 次X{n,} X,至少 n 次X{n,m} X,至少 n 次,但是不超过 m 次Reluctant 数量词 X?? X,一次或一次也没有 X*? X,零次或多次 X+? X,一次或多次 X{n}? X,恰好 n 次X{n,}? X,至少 n 次X{n,m}? X,至少 n 次,但是不超过 m 次Possessive 数量词 X?+ X,一次或一次也没有 X*+ X,零次或多次 X++ X,一次或多次 X{n}+ X,恰好 n 次X{n,}+ X,至少 n 次X{n,m}+ X,至少 n 次,但是不超过 m 次Logical 运算符 XY X 后跟 Y X|Y X 或Y(X) X,作为捕获组 Back 引用 \n 任何匹配的 nth 捕获组 引用 \ Nothing,但是引用以下字符 \Q Nothing,但是引用所有字符,直到 \E \E Nothing,但是结束从 \Q 开始的引用 特殊构造(非捕获) (?:X) X,作为非捕获组 (?idmsux-idmsux) Nothing,但是将匹配标志由 on 转为 off (?idmsux-idmsux:X) X,作为带有给定标志 on - off 的非捕获组 (?=X) X,通过零宽度的正 lookahead (?!X) X,通过零宽度的负 lookahead (?=X) X,通过零宽度的正 lookbehind (?!X) X,通过零宽度的负 lookbehind (?X) X,作为独立的非捕获组 反斜线、转义和引用 反斜线字符 ('\') 用于引用转义构造,如上表所定义的,同时还用于引用其他将被解释为非转义构造的字符.因此,表达式 \\ 与单个反斜线匹配,而\{ 与左括号匹配. 在不表示转义构造的任何字母字符前使用反斜线都是错误的;它们是为将来扩展正则表达式语言保留的.可以在非字母字符前使用反斜线,不管该字符是否非转义构造的一部分. 根据Java Language Specification 的要求,Java 源代码的字符串中的反斜线被解释为 Unicode 转义或其他字符转义.因此必须在字符串字面值中使用两个反斜线,表示正则表达式受到保护,不被 Java 字节码编译器解释.例如,当解释为正则表达式时,字符串字面值 "\b" 与单个退格字符匹配,而"\\b" 与单词边界匹配.字符串字面值 "\(hello\)" 是非法的,将导致编译时错误;要与字符串 (hello) 匹配,必须使用字符串字面值 "\\(hello\\)". 字符类 字符类可以出现在其他字符类中,并且可以包含并集运算符(隐式)和交集运算符 ().并集运算符表示至少包含其某个操作数类中所有字符的类.交集运算符表示包含同时位于其两个操作数类中所有字符的类. 字符类运算符的优先级如下所示,按从最高到最低的顺序排列: 1 字面值转义 \x 2 分组 [...] 3 范围 a-z 4 并集 [a-e][i-u] 5 交集 [a-z[aeiou]] 注意,元字符的不同集合实际上位于字符类的内部,而非字符类的外部.例如,正则表达式 . 在字符类内部就失去了其特殊意义,而表达式 - 变成了形成元字符的范围. 行结束符 行结束符 是一个或两个字符的序列,标记输入字符序列的行结尾.以下代码被识别为行结束符: 新行(换行)符('\n')、 后面紧跟新行符的回车符 ("\r\n")、 单独的回车符 ('\r')、 下一行字符 ('\u0085')、 行分隔符 ('\u2028') 或 段落分隔符 ('\u2029). 如果激活 UNIX_LINES 模式,则新行符是惟一识别的行结束符. 如果未指定 DOTALL 标志,则正则表达式 . 可以与任何字符(行结束符除外)匹配. 默认情况下,正则表达式 ^ 和$忽略行结束符,仅分别与整个输入序列的开头和结尾匹配.如果激活 MULTILINE 模式,则^在输入的开头和行结束符之后(输入的结尾)才发生匹配.处于 MULTILINE 模式中时,$ 仅在行结束符之前或输入序列的结尾处匹配. 组和捕获 捕获组可以通过从左到右计算其开括号来编号.例如,在表达式 ((A)(B(C))) 中,存在四个这样的组: 1 ((A)(B(C))) 2 \A 3 (B(C)) 4 (C) 组零始终代表整个表达式. 之所以这样命名捕获组是因为在匹配中,保存了与这些组匹配的输入序列的每个子序列.捕获的子序列稍后可以通过 Back 引用在表达式中使用,也可以在匹配操作完成后从匹配器检索. 与组关联的捕获输入始终是与组最近匹配的子序列.如果由于量化的缘故再次计算了组,则在第二次计算失败时将保留其以前捕获的值(如果有的话)例如,将字符串 "aba" 与表达式 (a(b)?)+ 相匹配,会将第二组设置为 "b".在每个匹配的开头,所有捕获的输入都会被丢弃. 以(?) 开头的组是纯的非捕获 组,它不捕获文本,也不针对组合计进行计数.

Java中 正则表达式中 组 是怎么用的?我看了n遍,没看懂

组其实就是用来提取正则中匹配到的内容。

比如有正则表达式:abc(\d{2,5})efg,这个正则本身的意思很简单,就是字符串abc和efg之间有2到5个数字,所以字符串"abc12efg"、“abc34567efg”都能满足这个正则匹配。这个相信你能理解。

那么正则表达式模式中用小括号包起来的"\d{2,5}"这部分就叫“捕获组”,正则表达式引擎会将这部分匹配到的内容记下来,以便以后取用。java代码中,可以在调用Matcher对象的find方法得到true的返回值的时候(true说明正则表达式模式找到了符合匹配的内容),调用该Matcher对象的group(int groupNo)方法获得指定的组内容。还拿刚才那个例子来说,调用matcher.group(1)就会得到"12"、“34567”这样实际匹配的内容。这里要特别注意一下,组编号是从1开始计算的。0号组实际上就是整个正则表达式匹配到的内容。

再深入一点,上面讲到的所谓组是“捕获组”,正则引擎会记下来匹配内容,但是有时候我们不需要捕获,只是想要限制匹配,就会用到非捕获组。如果你真明白了捕获组,再看非捕获组以及前瞻后顾就明白了。

关于java非捕获组和java正则捕获组的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

The End

发布于:2022-11-26,除非注明,否则均为首码项目网原创文章,转载请注明出处。