2004年12月28日

同じ有効範囲内の IDENTITY 列に挿入された最後の IDENTITY 値を返します。有効範囲はモジュール、つまりストアド プロシージャ、トリガ、関数、またはバッチです。このため、2 つのステートメントが同じストアド プロシージャ、関数、またはバッチにある場合、その有効範囲は同じです。

構文

SCOPE_IDENTITY( )

戻り値の型

sql_variant

解説

SCOPE_IDENTITY、IDENT_CURRENT、および @@IDENTITY は、IDENTITY 列に挿入された値を返すという点で似ています。

IDENT_CURRENT は有効範囲とセッションには限定されませんが、特定のテーブルに限定されます。IDENT_CURRENT は、任意のセッションと有効範囲内の特定のテーブルに対して生成された値を返します。詳細については、「IDENT_CURRENT」を参照してください。

同じ有効範囲内の IDENTITY 列に挿入された最後の IDENTITY 値を返します。有効範囲はモジュール、つまりストアド プロシージャ、トリガ、関数、またはバッチです。このため、2 つのステートメントが同じストアド プロシージャ、関数、またはバッチにある場合、その有効範囲は同じです。

構文

SCOPE_IDENTITY( )

戻り値の型

sql_variant

解説

SCOPE_IDENTITY、IDENT_CURRENT、および @@IDENTITY は、IDENTITY 列に挿入された値を返すという点で似ています。

IDENT_CURRENT は有効範囲とセッションには限定されませんが、特定のテーブルに限定されます。IDENT_CURRENT は、任意のセッションと有効範囲内の特定のテーブルに対して生成された値を返します。詳細については、「IDENT_CURRENT」を参照してください。

SCOPE_IDENTITY と @@IDENTITY は、現在のセッション内の任意のテーブルで生成された最後の ID 値を返します。ただし、SCOPE_IDENTITY が返す値は、現在の有効範囲の中で挿入された値に限られます。@@IDENTITY の場合は、特定の有効範囲に限定されません。

たとえば、T1 と T2 という 2 つのテーブルがあり、T1 上で INSERT トリガが定義されているものとします。T1 に行が挿入されると、トリガが起動し、T2 に行を挿入します。このシナリオでは、T1 上での挿入と、トリガの結果として得られる T2 上での挿入という、2 つの有効範囲があります。

T1 と T2 の両方に IDENTITY 列がある場合、T1 上で INSERT ステートメントが終了すると、@@IDENTITY と SCOPE_IDENTITY によってそれぞれ異なる値が返されます。

@@IDENTITY は、現在のセッション内の任意の有効範囲において挿入された最後の IDENTITY 列の値を返します。これは、T2 内で挿入された値です。

SCOPE_IDENTITY() は、T1 に挿入された IDENTITY 値を返します。これは、同じ有効範囲内で発生した最後の INSERT に相当します。SCOPE_IDENTITY() 関数は、有効範囲内で ID 列への INSERT ステートメントの前に起動されると、NULL 値を返します。

実例については、以下の「例」を参照してください。

この例では、TZ および TY という 2 つのテーブルと、TZ 上の INSERT トリガを作成します。テーブル TZ に行が挿入されるとトリガ Ztrig が起動し、TY に行が挿入されます。

USE tempdb
GO
CREATE TABLE TZ (
   Z_id  int IDENTITY(1,1)PRIMARY KEY,
   Z_name varchar(20) NOT NULL)

INSERT TZ
   VALUES ('Lisa')
INSERT TZ
   VALUES ('Mike')
INSERT TZ
   VALUES ('Carla')

SELECT * FROM TZ

--Result set: This is how table TZ looks
Z_id   Z_name
-------------
1      Lisa
2      Mike
3      Carla

CREATE TABLE TY (
   Y_id  int IDENTITY(100,5)PRIMARY KEY,
   Y_name varchar(20) NULL)

INSERT TY (Y_name)
   VALUES ('boathouse')
INSERT TY (Y_name)
   VALUES ('rocks')
INSERT TY (Y_name)
   VALUES ('elevator')

SELECT * FROM TY
--Result set: This is how TY looks:
Y_id  Y_name
---------------
100   boathouse
105   rocks
110   elevator

/*Create the trigger that inserts a row in table TY
when a row is inserted in table TZ*/
CREATE TRIGGER Ztrig
ON TZ
FOR INSERT AS
   BEGIN
   INSERT TY VALUES ('')
   END

/*FIRE the trigger and find out what identity values you get
with the @@IDENTITY and SCOPE_IDENTITY functions*/
INSERT TZ VALUES ('Rosalie')

SELECT SCOPE_IDENTITY() AS [SCOPE_IDENTITY]
GO
SELECT   @@IDENTITY AS [@@IDENTITY]
GO

--Here is the result set.
SCOPE_IDENTITY
4
/*SCOPE_IDENTITY returned the last identity value in the same scope, which was the insert on table TZ*/

@@IDENTITY
115
/*@@IDENTITY returned the last identity value inserted to TY by the trigger, which fired due to an earlier insert on TZ*/

2004年12月23日

使用正规表达式编写更好的 SQL

作者:Alice Rischert

Oracle Database 10g 中的正规表达式特性是一个用于处理文本数据的强大工具

Oracle Database 10g 的一个新特性大大提高了您搜索和处理字符数据的能力。这个特性就是正规表达式,是一种用来描述文本模式的表示方法。很久以来它已在许多编程语言和大量
UNIX 实用工具中出现过了。

Oracle 的正规表达式的实施是以各种 SQL 函数和一个 WHERE 子句操作符的形式出现的。如果您不熟悉正规表达式,那么这篇文章可以让您了解一下这种新的极其强大然而表面上有点神秘的功能。已经对正规表达式很熟悉的读者可以了解如何在
Oracle SQL 语言的环境中应用这种功能。

什么是正规表达式?

正规表达式由一个或多个字符型文字和/或元字符组成。在最简单的格式下,正规表达式仅由字符文字组成,如正规表达式 cat。它被读作字母 c,接着是字母 a
和 t,这种模式匹配 cat、location 和 catalog 之类的字符串。元字符提供算法来确定 Oracle 如何处理组成一个正规表达式的字符。当您了解了各种元字符的含义时,您将体会到正规表达式用于查找和替换特定的文本数据是非常强大的。

验证数据、识别重复关键字的出现、检测不必要的空格,或分析字符串只是正规表达式的许多应用中的一部分。您可以用它们来验证电话号码、邮政编码、电子邮件地址、社会安全号码、IP
地址、文件名和路径名等的格式。此外,您可以查找如 HTML 标记、数字、日期之类的模式,或任意文本数据中符合任意模式的任何事物,并用其它的模式来替换它们。

用 Oracle Database 10g 使用正规表达式

您可以使用最新引进的 Oracle SQL REGEXP_LIKE 操作符和 REGEXP_INSTR、REGEXP_SUBSTR 以及
REGEXP_REPLACE 函数来发挥正规表达式的作用。您将体会到这个新的功能如何对 LIKE 操作符和 INSTR、SUBSTR 和
REPLACE
函数进行了补充。实际上,它们类似于已有的操作符,但现在增加了强大的模式匹配功能。被搜索的数据可以是简单的字符串或是存储在数据库字符列中的大量文
本。正规表达式让您能够以一种您以前从未想过的方式来搜索、替换和验证数据,并提供高度的灵活性。

正规表达式的基本例子

在使用这个新功能之前,您需要了解一些元字符的含义。句号 (.) 匹配一个正规表达式中的任意字符(除了换行符)。例如,正规表达式 a.b 匹配的字符串中首先包含字母
a,接着是其它任意单个字符(除了换行符),再接着是字母 b。字符串 axb、xaybx 和 abba 都与之匹配,因为在字符串中隐藏了这种模式。如果您想要精确地匹配以
a 开头和以 b 结尾的一条三个字母的字符串,则您必须对正规表达式进行定位。脱字符号 (^) 元字符指示一行的开始,而美元符号 ($) 指示一行的结尾(参见
1
)。因此, 正规表达式 ^a.b$ 匹配字符串 aab、abb 或 axb。将这种方式与 LIKE 操作符提供的类似的模式匹配 a_b 相比较,其中
(_) 是单字符通配符。

默认情况下,一个正规表达式中的一个单独的字符或字符列表只匹配一次。为了指示在一个正规表达式中多次出现的一个字符,您可以使用一个量词,它也被称为重复操作符。.如果您想要得到从字母
a 开始并以字母 b 结束的匹配模式,则您的正规表达式看起来像这样:^a.*b$。* 元字符重复前面的元字符 (.) 指示的匹配零次、一次或更多次。LIKE
操作符的等价的模式是 a%b,其中用百分号 (%) 来指示任意字符出现零次、一次或多次。

表 2 给出了重复操作符的完整列表。注意它包含了特殊的重复选项,它们实现了比现有的 LIKE 通配符更大的灵活性。如果您用圆括号括住一个表达式,这将有效地创建一个可以重复一定次数的子表达式。例如,正规表达式
b(an)*a 匹配 ba、bana、banana、yourbananasplit 等。

Oracle 的正规表达式实施支持 POSIX (可移植操作系统接口)字符类,参见表 3 中列出的内容。这意味着您要查找的字符类型可以非常特别。假设您要编写一条仅查找非字母字符的
LIKE 条件 — 作为结果的 WHERE 子句可能不经意就会变得非常复杂。

POSIX 字符类必须包含在一个由方括号 ([]) 指示的字符列表中。例如,正规表达式 [[:lower:]] 匹配一个小写字母字符,而 [[:lower:]]{5}
匹配五个连续的小写字母字符。

除 POSIX 字符类之外,您可以将单独的字符放在一个字符列表中。例如,正规表达式 ^ab[cd]ef$ 匹配字符串 abcef 和 abdef。必须选择
c 或 d。

除脱字符 (^) 和连字符 (-) 之外,字符列表中的大多数元字符被认为是文字。正规表达式看起来很复杂,这是因为一些元字符具有随上下文环境而定的多重含义。^
就是这样一种元字符。如果您用它作为一个字符列表的第一个字符,它代表一个字符列表的非。因此,[^[:digit:]] 查找包含了任意非数字字符的模式,而
^[[:digit:]] 查找以数字开始的匹配模式。连字符 (-) 指示一个范围,正规表达式 [a-m] 匹配字母 a 到字母 m 之间的任意字母。但如果它是一个字符行中的第一个字符(如在
[-afg] 中),则它就代表连字符。

之前的一个例子介绍了使用圆括号来创建一个子表达式;它们允许您通过输入更替元字符来输入可更替的选项,这些元字符由竖线 (|) 分开。

例如,正规表达式 t(a|e|i)n 允许字母 t 和 n 之间的三种可能的字符更替。匹配模式包括如 tan、ten、tin 和 Pakistan 之类的字,但不包括
teen、mountain 或 tune。作为另一种选择,正规表达式 t(a|e|i)n 也可以表示为一个字符列表 t[aei]n。表 4 汇总了这些元字符。虽然存在更多的元字符,但这个简明的概述足够用来理解这篇文章使用的正规表达式。

REGEXP_LIKE 操作符

REGEXP_LIKE 操作符向您介绍在 Oracle 数据库中使用时的正规表达式功能。表 5 列出了 REGEXP_LIKE 的语法。

下面的 SQL 查询的 WHERE 子句显示了 REGEXP_LIKE 操作符,它在 ZIP 列中搜索满足正规表达式 [^[:digit:]] 的模式。它将检索
ZIPCODE 表中的那些 ZIP 列值包含了任意非数字字符的行。

SELECT zip FROM zipcode WHERE REGEXP_LIKE(zip, '[^[:digit:]]')

ZIP
-----
ab123
123xy
007ab
abcxy

这个正规表达式的例子仅由元字符组成,更具体来讲是被冒号和方括号分隔的 POSIX 字符类 digit。第二组方括号(如 [^[:digit:]] 中所示)包括了一个字符类列表。如前文所述,需要这样做是因为您只可以将
POSIX 字符类用于构建一个字符列表。

REGEXP_INSTR 函数

这个函数返回一个模式的起始位置,因此它的功能非常类似于 INSTR 函数。新的 REGEXP_INSTR 函数的语法在表 6 中给出。这两个函数之间的主要区别是,REGEXP_INSTR
让您指定一种模式,而不是一个特定的搜索字符串;因而它提供了更多的功能。接下来的示例使用 REGEXP_INSTR 来返回字符串 Joe Smith, 10045
Berry Lane, San Joseph, CA 91234 中的五位邮政编码模式的起始位置。如果正规表达式被写为 [[:digit:]]{5},则您将得到门牌号的起始位置而不是邮政编码的,因为
10045 是第一次出现五个连续数字。因此,您必须将表达式定位到该行的末尾,正如 $ 元字符所示,该函数将显示邮政编码的起始位置,而不管门牌号的数字个数。

SELECT REGEXP_INSTR('Joe Smith, 10045 Berry Lane, San Joseph, CA 91234', 
'[[:digit:]]{5}$') AS rx_instr FROM dual

RX_INSTR
----------
45

编写更复杂的模式

让我们在前一个例子的邮政编码模式上展开,以便包含一个可选的四位数字模式。您的模式现在可能看起来像这样:[[:digit:]]{5}(-[[:digit:]]{4})?$。如果您的源字符串以
5 位邮政编码或 5 位 + 4 位邮政编码的格式结束,则您将能够显示该模式的起始位置。

SELECT REGEXP_INSTR('Joe Smith, 10045 Berry Lane, San Joseph, CA 91234-1234',
' [[:digit:]]{5}(-[[:digit:]]{4})?$') AS starts_at FROM dual

STARTS_AT
----------
44

在这个示例中,括弧里的子表达式 (-[[:digit:]]{4}) 将按 ? 重复操作符的指示重复零次或一次。此外,企图用传统的 SQL 函数来实现相同的结果甚至对
SQL 专家也是一个挑战。为了更好地说明这个正规表达式示例的不同组成部分,表 7 包含了一个对单个文字和元字符的描述。

REGEXP_SUBSTR 函数

类似于 SUBSTR 函数的 REGEXP_SUBSTR 函数用来提取一个字符串的一部分。表 8 显示了这个新函数的语法。在下面的示例中,匹配模式 [^,]*
的字符串将被返回。该正规表达式搜索其后紧跟着空格的一个逗号;然后按 [^,]* 的指示搜索零个或更多个不是逗号的字符,最后查找另一个逗号。这种模式看起来有点像一个用逗号分隔的值字符串。

SELECT REGEXP_SUBSTR('first field, second field , third field',  ', [^,]*,') FROM dual

REGEXP_SUBSTR('FIR
------------------
, second field ,

REGEXP_REPLACE 函数

让我们首先看一下传统的 REPLACE SQL 函数,它把一个字符串用另一个字符串来替换。假设您的数据在正文中有不必要的空格,您希望用单个空格来替换它们。利用
REPLACE 函数,您需要准确地列出您要替换多少个空格。然而,多余空格的数目在正文的各处可能不是相同的。下面的示例在 Joe 和 Smith 之间有三个空格。REPLACE
函数的参数指定要用一个空格来替换两个空格。在这种情况下,结果在原来的字符串的 Joe 和 Smith 之间留下了一个额外的空格。

SELECT REPLACE('Joe Smith',' ', ' ') AS replace FROM dual

REPLACE
---------
Joe Smith

REGEXP_REPLACE 函数把替换功能向前推进了一步,其语法在表 9 中列出。以下查询用单个空格替换了任意两个或更多的空格。( ) 子表达式包含了单个空格,它可以按
{2,} 的指示重复两次或更多次。

SELECT REGEXP_REPLACE('Joe Smith',  '( ){2,}', ' ') AS RX_REPLACE FROM dual

RX_REPLACE
----------
Joe Smith


后向引用

正则表达式的一个有用的特性是能够存储子表达式供以后重用;这也被称为后向引用(在表 10 中对其进行了概述)。它允许复杂的替换功能,如在新的位置上交换模式或显示重复出现的单词或字母。子表达式的匹配部分保存在临时缓冲区中。缓冲区从左至右进行编号,并利用
\digit 符号进行访问,其中 digit 是 1 到 9 之间的一个数字,它匹配第 digit 个子表达式,子表达式用一组圆括号来显示。

接下来的例子显示了通过按编号引用各个子表达式将姓名 Ellen Hildi Smith 转变为 Smith, Ellen Hildi。

SELECT REGEXP_REPLACE(
'Ellen Hildi Smith',
'(.*) (.*) (.*)', '\3, \1 \2')
FROM dual

REGEXP_REPLACE('EL
------------------
Smith, Ellen Hildi

该 SQL 语句显示了用圆括号括住的三个单独的子表达式。每一个单独的子表达式包含一个匹配元字符 (.),并紧跟着 *
元字符,表示任何字符(除换行符之外)都必须匹配零次或更多次。空格将各个子表达式分开,空格也必须匹配。圆括号创建获取值的子表达式,并且可以用
\digit 来引用。第一个子表达式被赋值为 \1 ,第二个 \2,以此类推。这些后向引用被用在这个函数的最后一个参数 (\3, \1 \2)
中,这个函数有效地返回了替换子字符串,并按期望的格式来排列它们(包括逗号和空格)。
11
详细说明了该正则表达式的各个组成部分。

后向引用对替换、格式化和代替值非常有用,并且您可以用它们来查找相邻出现的值。接下来的例子显示了使用 REGEP_SUBSTR 函数来查找任意被空格隔开的重复出现的字母数字值。显示的结果给出了识别重复出现的单词
is 的子字符串。

SELECT REGEXP_SUBSTR(
'The final test is is the implementation',
'([[:alnum:]]+)([[:space:]]+)\1') AS substr
FROM dual

SUBSTR
------
is is

匹配参数选项

您可能已经注意到了正则表达式操作符和函数包含一个可选的匹配参数。这个参数控制是否区分大小写、换行符的匹配和保留多行输入。

正则表达式的实际应用

您不仅可以在队列中使用正则表达式,还可以在使用 SQL 操作符或函数的任何地方(比如说在 PL/SQL 语言中)使用正则表达式。您可以编写利用正则表达式功能的触发器,以验证、生成或提取值。

接下来的例子演示了您如何能够在一次列检查约束条件中应用 REGEXP_LIKE 操作符来进行数据验证。它在插入或更新时检验正确的社会保险号码格式。如
123-45-6789 和 123456789 之类格式的社会保险号码对于这种列约束条件是可接受的值。有效的数据必须以三个数字开始,紧跟着一个连字符,再加两个数字和一个连字符,最后又是四个数字。另一种表达式只允许
9 个连续的数字。竖线符号 (|) 将各个选项分开。

ALTER TABLE students
ADD CONSTRAINT stud_ssn_ck CHECK
(REGEXP_LIKE(ssn,
'^([[:digit:]]{3}-[[:digit:]]{2}-[[:digit:]]{4}|[[:digit:]]{9})$'))

由 ^ 和 $ 指示的开头或结尾的字符都是不可接受的。确保您的正则表达式没有分成多行或包含任何不必要的空格,除非您希望格式如此并相应地进行匹配。表 12
说明了该正则表达式示例的各个组成部分。

将正则表达式与现有的功能进行比较

正则表达式有几个优点优于常见的 LIKE 操作符和 INSTR、SUBSTR 及 REPLACE 函数的。这些传统的 SQL
函数不便于进行模式匹配。只有 LIKE 操作符通过使用 % 和 _ 字符匹配,但 LIKE
不支持表达式的重复、复杂的更替、字符范围、字符列表和 POSIX
字符类等等。此外,新的正则表达式函数允许检测重复出现的单词和模式交换。这里的例子为您提供了正则表达式领域的一个概览,以及您如何能够在您的应用程序
中使用它们。

实实在在地丰富您的工具包

因为正则表达式有助于解决复杂的问题,所以它们是非常强大的。正则表达式的一些功能难于用传统的 SQL 函数来仿效。当您了解了这种稍显神秘的语言的基础构建程序块时,正则表达式将成为您的工具包的不可缺少的一部分(不仅在
SQL 环境下也在其它的编程语言环境下)。为了使您的各个模式正确,虽然尝试和错误有时是必须的,但正则表达式的简洁和强大是不容置疑的。

Alice Rischert (ar280@yahoo.com) 是哥伦比亚大学计算机技术与应用系的数据库应用程序开发和设计方向的主席。她编写了
Oracle SQL 交互手册 第 2
(Prentice Hall,2002)和即将推出的 Oracle SQL 示例
(Prentice Hall,2003)。Rischert 拥有超过 15 年的经验在财富 100 强公司内担任数据库设计师、DBA 和项目主管,并且她自从
Oracle version 5 起就一直使用 Oracle 产品。

表 1:定位元字符

元字符 说明
^ 使表达式定位至一行的开头
$ 使表达式定位至一行的末尾

表 2:量词或重复操作符

量词 说明
* 匹配 0 次或更多次
? 匹配 0 次或 1 次
+ 匹配 1 次或更多次
{m} 正好匹配 m
{m,} 至少匹配 m
{m, n} 至少匹配 m 次但不超过 n

表 3:预定义的 POSIX 字符类

字符类 说明
[:alpha:] 字母字符
[:lower:] 小写字母字符
[:upper:] 大写字母字符
[:digit:] 数字
[:alnum:] 字母数字字符
[:space:] 空白字符(禁止打印),如回车符、换行符、竖直制表符和换页符
[:punct:] 标点字符
[:cntrl:] 控制字符(禁止打印)
[:print:] 可打印字符

表 4:表达式的替换匹配和分组

元字符 说明
| 替换 分隔替换选项,通常与分组操作符 () 一起使用
( ) 分组 将子表达式分组为一个替换单元、量词单元或后向引用单元(参见“后向引用”部分)
[char] 字符列表 表示一个字符列表;一个字符列表中的大多数元字符(除字符类、^- 元字符之外)被理解为文字

表 5:REGEXP_LIKE 操作符

语法 说明
REGEXP_LIKE(source_string, pattern

[, match_parameter])
source_string 支持字符数据类型(CHAR、VARCHAR2、CLOB、NCHAR、NVARCHAR2NCLOB,但不包括 LONG)。pattern 参数是正则表达式的另一个名称。match_parameter 允许可选的参数(如处理换行符、保留多行格式化以及提供对区分大小写的控制)。

表 6:REGEXP_INSTR 函数

语法 说明
REGEXP_INSTR(source_string, pattern

[, start_position

[, occurrence

[, return_option

[, match_parameter]]]])
该函数查找 pattern ,并返回该模式的第一个位置。您可以随意指定您想要开始搜索的 start_positionoccurrence 参数默认为 1,除非您指定您要查找接下来出现的一个模式。return_option 的默认值为 0,它返回该模式的起始位置;值为 1 则返回符合匹配条件的下一个字符的起始位置。

表 7: 5 位数字加 4 位邮政编码表达式的说明

语法 说明

必须匹配的空白
[:digit:] POSIX 数字类
] 字符列表的结尾
{5} 字符列表正好重复出现 5 次
( 子表达式的开头
- 一个文字连字符,因为它不是一个字符列表内的范围元字符
[ 字符列表的开头
[:digit:] POSIX [:digit:]
[ 字符列表的开头
] 字符列表的结尾
{4} 字符列表正好重复出现 4 次
) 结束圆括号,结束子表达式
? ? 量词匹配分组的子表达式 0 或 1 次,从而使得 4 位代码可选
$ 定位元字符,指示行尾

表 8:REGEXP_SUBSTR
函数

语法 说明
REGEXP_SUBSTR(source_string, pattern

[, position [, occurrence

[, match_parameter]]])
REGEXP_SUBSTR 函数返回匹配模式的子字符串。

表 9: REGEXP_REPLACE 函数

语法 说明
REGEXP_REPLACE(source_string, pattern

[, replace_string [, position

[,occurrence, [match_parameter]]]])
该函数用一个指定的 replace_string 来替换匹配的模式,从而允许复杂的“搜索并替换”操作。

表 10:后向引用元字符

元字符 说明
\digit 反斜线 紧跟着一个 1 到 9 之间的数字,反斜线匹配之前的用括号括起来的第 digit 个子表达式。

(注意:反斜线在正则表达式中有另一种意义,取决于上下文,它还可能表示
Escape 字符。

表 11:模式交换正则表达式的说明

正则表达式项目 说明
( 第一个子表达式的开头
. 匹配除换行符之外的任意单字符
* 重复操作符,匹配之前的 .
元字符 0 到 n
) 第一个子表达式的结尾;匹配结果在 \1

中获取(在这个例子中,结果为 Ellen。)

必须存在的空白
( 第二个子表达式的开头
. 匹配除换行符之外的任意单个字符
* 重复操作符,匹配之前的 .
元字符 0 到 n
) 第二个子表达式的结尾;匹配结果在 \2

中获取(在这个例子中,结果为 Hildi。)

空白
( 第三个子表达式的开头
. 匹配除换行符之外的任意单字符
* 重复操作符,匹配之前的 .
元字符 0 到 n
) 第三个子表达式的结尾;匹配结果在 \3

中获取(在这个例子中,结果为 Smith。)

表 12:社会保险号码正则表达式的说明

正则表达式项目 说明
^ 行首字符(正则表达式在匹配之前不能有任何前导字符。)
( 开始子表达式并列出用 | 元字符分开的可替换选项
[ 字符列表的开头
[:digit:] POSIX 数字类
] 字符列表的结尾
{3} 字符列表正好重复出现 3 次
- 连字符
[ 字符列表的开头
[:digit:] POSIX 数字类
] 字符列表的结尾
{2} 字符列表正好重复出现 2 次
- 另一个连字符
[ 字符列表的开头
[:digit:] POSIX 数字类
] 字符列表的结尾
{4} 字符列表正好重复出现 4 次
| 替换元字符;结束第一个选项并开始下一个替换表达式
[ 字符列表的开头
[:digit:] POSIX 数字类
] 字符列表的结尾
{9} 字符列表正好重复出现 9 次
) 结束圆括号,结束用于替换的子表达式组
$ 定位元字符,指示行尾;没有额外的字符能够符合模式
2004年12月08日

35岁是青春的后期,35岁以后是收获的季节,如果你没有资格说这句话,你将会憎恨自己。所以在35岁以前,在烂漫蓬勃的青春年华里,你最好把下面十件事做好

第一,学会本行业所需要的一切知识并有所发展。已故零件大王布鲁丹在他35岁时,已经成为零件行业的领袖,并且组建了年收入达千万美元的海湾与西部工业公司。每个人在年轻时都可能有过彻夜不眠、刻苦攻读,这在20岁甚或30岁都没有问题,但到了35岁,就不应该再为学习基本技能而大伤脑筋了。35岁之前是一个人从事原始积累的阶段,35岁之后就应该勃发了。

第二,养成个人风格。在35岁以前,找出你所喜欢的,不论是衣着或是爱好,哪怕是与众不同的小习惯也好。20岁、30岁时你可以不断尝试、不断改变,但是到了35岁,你便要明确地建立个人风格。一位男士或女士在事业中途改变自己的形象,就会让人觉得很不可靠。你喜欢穿西装吗?好!就把西装当作你的商标吧!办公桌上摆些鲜花会令你工作更有效率吗?那就每天都摆些鲜花吧!

第三,在感情生活方面平和安定。在攀登事业的高峰时,如果私人生活不愉快,陷入感情危机,对你会产生很大的干扰,甚至会逐渐令你对别的事物失去兴趣。那些在35岁之前私人生活已经平和安定的人,一般都比生活动荡不安的人有更大的机会获得成功。因此,如果你想结束一段没有结果的恋情,或者你想和女友结婚,那就赶快行动吧,免得把问题拖到生命的第35个春秋。在35岁以后,你应该专注地看着你对事业的投资开始获利。

第四,明白自己的短处。承认有些事情你的确做不好,或者不愿做。如果你讨厌数字而喜欢创作,那就不要因为待遇高或顺从别人的期望而强迫自己做数字工作。在35岁之前,一定要投入你所喜爱、所擅长的那种工作。否则,35岁之后必然会有一段郁郁不乐的日子。而且,真正的成功可能因为活力的消退而丧失。

第五,知道自己的长处。你应该知道自己擅长什么,并且清楚你所喜欢做而又做得比别人好的事情。不管你目前担任什么样的角色,知道自己的长处对成功都很重要。

第六,储备辞职另谋生路的钱。在这个多变的职业世界里,你也许不会永远在一个地方工作,或者永远在一个位置上淋漓尽致地发挥自己,当你感到无法施展时,你很可能会想到辞职,或者开辟第二职业,如果你事先储蓄了足够的钱,你便有了一个安全的后盾。

第七,建立人际关系网。如果到了35岁你仍未建立起牢固的人际关系网,那你就有麻烦了。这个人际关系网包括你的朋友、亲人,最低限度包括所有可以互相帮助的人。这些人有的是你的同事,有的受过你的恩惠,有的你倾听过他们的问题,有的你和他有着相同的爱好。人际关系网不是一朝一夕就能建立起来的,它需要几年甚至十几年的培养。一个人在事业上、生活上的成功其实如同一个政党的成功,你要有许多人散布在适当的地方,你可以依赖他们,他们也可以依赖你。

第八,学会授权他人。许多人不肯或不能这样做,因此始终被钉在从属的职位上。授权他人是成功的一半,一个事无巨细,不能将工作授权别人的人,注定会遇到极大的障碍。到了35岁,你最好已成为这方面的专家。换言之,你懂得挑选合适的人并信任他们。

第九,学会在什么时候三缄其口。因说话不小心而自毁前程的人,比因为任何其他原因丧失成功的人都多。要学会保持沉默而且看起来机智–别人自然以为你知道的比实际还多。别讲别人的闲话,别谈论你自己的大计,守口如瓶所赢得的声誉,远比讲人闲话所带来的东西更加珍贵。你在事业上越成功,这一点就越重要。

第十,对人要忠诚。如果你到了35岁仍未能建立起坚如磐石的忠诚信誉,这一缺点将会困扰你一生。不忠诚的恶名必然会使你在事业上到处不受欢迎。你不能靠暗箭伤人爬到事业的顶峰,而要靠在早期树立起来的真诚刚直和不可动摇的声誉。35岁以前,忠诚只是投资;35岁以后,你会作为一个可以信赖的人收到忠诚的回报。

2004年12月02日

(1)财富修养
  
  在一次新闻发布会上,人们发现坐在前排的美国传媒巨头ABC副总裁麦卡锡突然蹲下身子,钻到了桌子底下。大家目瞪口呆,不知道这位大亨为什么会在大庭广众之下做出如此有损形象的事情。
  
  不一会儿,他从桌子底下钻了出来,扬扬手中的雪茄,平静地说;“对不起,我的雪茄掉到桌子底下了,母亲告诉过我,应该爱惜自己的每一分钱。”
  
  麦卡锡是亿万富翁,照理说,应该不会理睬这根掉在地上的雪茄,但他却给了我们意想不到的答案。     
  
  这是一种财富修养,这种修养正是他们创造巨大财富的源泉所在。
  
 (2) 爱情巫师
  
  非洲的一个部落酋长有三个女儿,前两个女儿既聪明又漂亮,都是被人用九头牛作聘礼娶走的。在当地,这是最高规格的聘礼了。第三个女儿到了出嫁的时候,却一直没有人肯出九头牛来娶,原因是她非但不漂亮,还很懒惰。后来一个远方来的游客听说了这件事,就对酋长说:“我愿意用九头牛来换你的女儿。”酋长非常高兴,真的把女儿嫁给了外乡人。
  
  过了几年,酋长去看自己远嫁他乡的三女儿。没想到,女儿变成了一个气质超俗的漂亮女人,而且能亲自下厨做美味佳肴来款待他,酋长很震惊,偷偷地问女婿:“难道你是巫师吗?你是怎么把她调教成这样的?”女婿说:“我没有调教她,我只是始终坚信你的女儿值九头牛,所以她就一直按照九头牛的标准来做了,就这么简单。”
  
  心理暗示的作用非常神奇,尤其在婚姻关系中。如果你每天试着发自内心地赞美你的爱人,而不是诉苦或抱怨,那么你一定会发现,对方也在悄悄地改变——而且正是朝着你所希望的方向。
  
  (3)不生气的秘诀
  
  古时候,有一个叫爱地巴的人,他一生气就跑回家去,然后绕自己的房子和土地跑三圈。后来,他的房子越来越大,土地也越来越多,而一生气时,他仍要绕着房子和土地跑三圈,哪怕累得气喘吁吁,汗流浃背。
  
  孙子问:“阿公!你生气时就绕着房子和土地跑,这里面有什么秘密?”
  
  爱地巴对孙子说:“年轻时,一和人吵架、争论、生气时,我就绕着自己的房子和土地跑三圈。我边跑边想——自己的房子这么小,土地这么少,哪有时间和精力去跟别人生气呢?一想到这里,我的气就消了,也就有了更多的时间和精力来工作和学习了。”
  
  孙子又问;“阿公!成了富人后,您为什么还要绕着房子和土地跑呢?”
  
  爱地巴笑着说:“边跑我就边想啊——我房子这么大,土地这么多,又何必和人计较呢?一想到这里我的气也就消了。”
  
 (4) 一双鞋
  
  在印度马德里东北部的朱木拿河畔,有一座坟墓,墓主人叫甘地。
  
  甘地生前有一次外出,在火车将要启动的时候,他急匆匆地踏上车门,不小心一只脚被车门夹了一下,鞋子掉在了车门外。火车启动后,他没有犹豫,随即将另一只鞋脱下来,也扔出窗外。
  
  一些乘客不解地问他为什么要把另一只鞋也丢掉,甘地说:“如果一个穷人正好从铁路旁经过,他就可以得到一双鞋,而不是一只鞋。”
  
  甘地被当地人尊称为“圣雄”。
  
  是啊,一个人能随时随地想到那些需要关爱和帮助的人,他不是圣人是什么?如果每个人都能这样想这样做,世界一定会像春天般温暖!
  
  (5)当机立断
  
  电脑名人王安博士声称,影响他一生的最大教训发生在他6岁时。
  
  有一天,王安走在树下,突然有个鸟巢掉在他的头上,从里面滚出来一只小麻雀。他很喜欢它,于是连同鸟巢一起带回了家。他走到门口,忽然想起妈妈不允许他在家里养小动物。他只好轻轻地把小麻雀放到门后,然后急步走进屋内,请求妈妈的允许。
  
  在他的哀求下,妈妈破例答应了他的请求。王安兴奋地跑到门后,不料,小麻雀已经不见了,一只黑猫正意犹未尽地擦拭着嘴巴。
  
  从这件事,王安得到了一个很大的教训。只要自己认为对的事情,不可优柔寡断,必须马上付诸行动。不能作决定的人,固然没有做错事的机会。但也失去了成功的可能。

生活在匆忙、不停追赶的大都市,相信我们每个人都会有这种感觉:我们都会成功,而且是迟早的事。我们不能只是坐着,总要在生命里成就一些大事,一些让我们觉得骄傲的事。

我们都一度地认为忙碌是表示工作有效率。因此在还未找到合适的方法前就一头钻进许许多多的事情里面。把自己放在时间的陷阱里,认定人生就是匆匆来匆去,歹不知效率意味什么?

效率就是先做对的事再把事情做好做对。

紧张忙碌的生活步调,不停追赶的节奏,使得我们每天不得不拼命接着处理一件又一件的事,使我们无法停下来享受生活中的美好事物。更是没有时间去思索人生的精华所在。

经常会看到身边的许多人,一面开车一面喝咖啡或接手机,或刷睫毛。坐地铁去约会,在拥挤的地铁车上抓着拉环边擦口红。去超市购物亦如此。去柜台结帐时,眼睛先会急忙的看哪一个结帐柜台的人最少,接着就快步跑,希望能比同样在赶那条结帐柜台的其他顾客早一步到。

匆忙的生活,常常让我们忘了如何用时间去爱我们周遭的人,抹煞我们爱人、表达爱的能力。让我们不断地追逐地跑着,把我们弄得心浮气躁,无法静下心来去思考一下,自己应该去思考的事情。

说这些,不是要我们把工作放下。花尽所有的钱,去享受,去旅游。而是在烦忙的生活中,不要忘记给自己些许喘气的时间。停五分钟,去享受你喜欢喝的咖啡,拨个电话给我们亲爱的朋友,说一些想念他的话。或和孩子散步,或听美妙的音乐,或关怀我们的家人,说些感激的话。这些事不会用去我们太多的时间,却能让我们的生活充满愉快的品质。

我们在一生中,总要扮演许多角色。而时代潮流却常常让我们以为只扮演一下角色。我们必须逆向而行才能够把生命活得光彩,让我们成为有效率又有效果的人。

 工作中,我也不是个很钻牛角尖的人。看着那些在职场拼个你死我活的同事,只觉得好笑。努力奋斗为了什么?不就是为了能生活得快乐一点吗?我现在已经全都得到了,为什么还要去奋斗。正所谓,别人笑我太堕落,我笑他人看不穿。

1、父子二人经过五星级饭店门口,看到一辆十分豪华的进口轿车。儿子不屑地对他的父亲说:“坐这种车的人,肚子里一定没有学问!”而父亲则轻描淡写地回答:“说这种话的人,口袋里一定没有钱!”

  点评:你对事情的看法,是不是也反映出你内心真正的态度?
  
  2、晚饭后,母亲和女儿一块儿洗碗盘,父亲和儿子在客厅看电视。突然,厨房里传来打破盘子的响声,然后一片沉寂。于是儿子望着他父亲,说道:“一定是妈妈打破的。”“你怎么知道?”“她没有骂人。”

  点评:我们习惯以不同的标准来看人看己,以致往往是责人以严,待己以宽。

  3、有两个台湾观光团到日本伊豆半岛旅游,路况很差,到处都是坑洞。其中一位导游连声抱歉,说路面简直像麻子一样。而另一个导游却诗意盎然地对游客说:“诸位先生、女士,我们现在走的这条道路正是赫赫有名的伊豆迷人酒窝大道。”

  点评:虽是同样的情况,然而不同的意念却会产生不同的态度。思想是何等奇妙的事,如何去想,决定权在你。

  4、同样是小学三年级的学生,在作文中说他们将来的志愿是当小丑。中国的老师斥之曰:“胸无大志,孺子不可教也!”而外国的老师则会说:“愿你把欢笑带给全世界!”

  点评:身为长辈的我们,不但容易要求多于鼓励,更狭窄地界定了成功的定义。

   5、在故宫博物院中,有一位太太不耐烦地对她先生说:“我说你为什么走得这么慢。原来你老是停下来看这些东西。”

  点评:有人只知道在人生的道路上狂奔,结果失去了观看两旁美丽花朵的机会。

  6、妻子正在厨房炒菜。丈夫在她旁边一直唠叨不停:慢些。小心!火太大了。赶快把鱼翻过来。快铲起来。油放太多了!把豆腐整平一下!“哎呀,”妻子脱口而出,“我懂得怎样炒菜。”“你当然懂,太太,”丈夫平静地答道:“我只是要让你知道,我在开车时,你在旁边喋喋不休,我的感觉如何。”

  点评:学会体谅他人并不困难,只要你愿意认真地站在对方的角度和立场看问题。

  7、一辆满载乘客的公共汽车沿着下坡路快速前进着,有一个人在后面紧紧地追赶着这辆车子。一个乘客从车窗中伸出头来对追车子的人说:“老兄!算啦,你追不上的!”“我必须追上它,”这人气喘吁吁地说:“我是这辆车的司机!”

  点评:有些人必须非常认真、努力,因为不这样的话,后果就十分悲惨了!然而也正因为必须全力以赴,潜在的本能和不为人知的特质终将充分展现出来。

  8、甲:“新搬来的邻居好可恶,昨天晚上三更半夜、夜深人静之时居然跑来猛按我家的门铃。” 乙:“的确可恶!你有没有马上报警?” 甲:“没有。我当他们是疯子,继续吹我的小喇叭。”

  点评:事出必定有因,如果能先看到自己的不是,答案就会不一样。在你面对冲突和争执时,先想一想是否心中有亏,或许很快就能释怀了。

  9、某日,张三在山间小路开车,正当他悠哉地欣赏美丽风景时,突然迎面开来一辆货车,而且满囗黑牙的司机还摇下窗户对他大骂一声:“猪!” 张三听了很纳闷,也很生气,于是他也摇下车窗回头大骂:“你才是猪!”才刚骂完,他便迎头撞上一群过马路的猪。

  点评:不要错误地诠释别人的好意,那只会让自己吃亏,并且使别人受辱。在不明所以之前,先学会按捺情绪,耐心观察,以免事后生悔。

  10、小男孩问爸爸:“是不是做父亲的总比做儿子的知道得多?”爸爸回答:“当然啦!”小男孩问:“电灯是谁发明的?”爸爸:“是爱迪生。”小男孩又问:“那爱迪生的爸爸怎么没有发明电灯?”

  点评:很奇怪,喜欢倚老卖老的人,特别容易栽跟斗。权威往往只是一个经不起考验的空壳子,尤其在当今这个多元、开放的时代。
  
  11、小明洗澡时不小心吞下一小块肥皂,他的妈妈慌慌张张地打电话向家庭医生求助。医生说:“我现在还有几个病人在,可能要半小时以后才能赶过去。”小明妈妈说:“在你来之前,我该做什么?”医生说:“给小明喝一杯白开水,然后用力跳一跳,你就可以让小明用嘴巴吹泡泡消磨时间了。”

  点评:take it easy!放轻松、放轻松,生活何必太紧张?事情既然已经发生了,何不坦然自在地面对。担心不如宽心,穷紧张不如穷开心。

  12、一把坚实的大锁挂在大门上,一根铁棍费了九牛二虎之力,还是无法将它撬开。钥匙来了,他瘦小的身子钻进锁孔,只轻轻一转,大锁就“啪”地一声打开了。铁棍奇怪地问:“为什麽我费了那么大的力气也打不开,而你却轻易举地就把它打开了呢?”钥匙说:“因为我最了解他的心。”

  点评:每个人的心,都像上了锁的大门,任你再粗的铁棍也撬不开。唯有关怀,才能把你变成一把细腻的钥匙,进入别人的心中,了解别人

在古老的西藏,有一各叫做爱地巴的人,每次生气和人起争执的时候,就以很快的速度跑回家去,绕着自己的房子和土地跑3圈,然后坐在田地边喘气,爱地巴工作非常勤劳努力,他的房子越来越大,土地也越来越广,但不管房地有多大,只要与人争论生气,他还是会绕着房子和土地绕3圈,爱地巴为何每次生气都绕着房子和土地绕3圈?

  所有认识他的人,心理都起疑惑,但是不管怎么问他,爱地巴都不愿意说明,直到有一天,爱地巴很老,他的房地又已经太广大,他生气,柱着拐杖艰难的绕着土地跟房子,等他好不容易走3圈,太阳都下山,爱地巴独自坐在田边喘气,他的孙子在身边恳求他:「阿公,你已经年纪大,这附近地区的人也没有人的土地比你更大,您不能在向从前,一生气就绕着土地跑啊!您可不可以告诉我这个秘密,为什么您一生气就要绕着土地跑上3圈???」

  爱地巴禁不起孙子恳求,终于说出隐藏在心中多年的秘密,他说:「年轻时,我一和人吵架、争论、生气,就绕着房地跑3圈,边跑边想,我的房子这么小,土地这么小,我哪有时间,哪有资格去跟人家生气,一想到这里,气就消,于是就把所有时间用来努力工作。」

  孙子问到:「阿公,你年纪老,又变成最富有的人,为什么还要绕着房地跑?」

  爱地巴笑着说:「我现在还是会生气,生气时绕着房地走3圈,边走边想,我的房子这么大,土地这么多,我又何必跟人计较?一想到这,气就消了。」
  
  每一株玫瑰都有刺;正如每一个人的性格中,都有你不能容忍的部份。

  爱护一朵玫瑰,并不是得努力把它的刺根除,只能学习如何不被它的刺刺伤;还有,如何不让自己的刺刺伤心爱的人。

 有个年轻人在脚踏车店当学徒。有人送来一辆有毛病的脚踏车,年轻人除了将车修好,还把车子整理得漂亮如新,其他学徒笑他多此一举。后来车主将脚踏车领回去的第二天,年轻人被挖到那位车主的公司上班。—–原来要获得机会很简单,勤劳一点就可以了。
  有个小孩对母亲说:“妈妈你今天好漂亮。”母亲问:“为什么?”小孩说:“因为妈妈今天一天都没有生气。”—–原来拥有漂亮很简单,只要不生气就可以了。
  有个牧场主人,叫他的孩子每天在牧场上辛勤地工作,朋友对他说:“你不需要让孩子如此辛苦,农作物一样会长得很好的。”牧场主人回答说:“我不是在培养农作物,我是在培养我的孩子。”—–原来培养孩子很简单,让他吃点苦头就可以了。
  住在田边的青蛙对住在路边的青蛙说:“你这里太危险,搬来跟我住吧!”路边的青蛙说:“我已经习惯了,懒得搬了。”几天后,田边的青蛙去探望路边的青蛙,却发现它已被车子压死了。—–原来掌握命运的方法很简单,远离懒惰就可以了。
  有几个小孩都很想成为一位智者的学生,智者给他们一人一个烛台,叫他们要保持光亮,结果一天两天过去了,智者都没来,大部分小孩已不再擦拭那烛台。有一天智者突然到来,大家的烛台都蒙上厚厚的灰尘,只有一个被大家叫做“笨小孩”的小孩,虽然智者没来,他也每天擦拭,结果这个笨小孩成了智者的学生。— –原来想实现理想很简单,只要实实在在地去做就可以了。
  有一支淘金队伍在沙漠中行走,大家都步伐沉重,痛苦不堪,只有一人快乐地走着,别人问:“你为何如此惬意?”他笑着说:“因为我带的东西最少。”—–原来快乐很简单,不要斤斤计较就可以了。

人与佛关于婚外情的一段对话

深夜,寺里一人一佛,佛坐人站。
 人:圣明的佛,我是一个已婚之人,我现在狂热地爱上了另一个女人,我真的不知道该怎么办。
 佛:你能确写你现在爱上的这个女人就是你生命里唯一的最后一个女人吗?
 人:是的。
 佛:你离婚,然后娶她。
 人:可是我现在的爱人温柔,善良,贤惠,我这样做是否有一点残忍,有一点不道德。
 佛:在婚姻中没有爱才是残忍和不道德的,你现在爱上了别人已不爱她了,你这样做是正确的。
 人:可是我爱人很爱我,真的很爱我。
 佛:那她就是幸福的。
 人:我要与她离婚后另娶她人,她应该是很痛苦的又怎么会是幸福的呢?
 佛:在婚姻里她还拥有她对你的爱,而你在婚姻中已失去对她的爱,因为你爱上了别人,正谓拥有的就是幸福的,失去的才是痛苦的,所以痛苦的人是你。
 人:可是我要和她离婚后另娶她人,应该是她失去了我,她应该才是痛苦的。
 佛:你错了,你只是她婚姻中真爱的一个具体,当你这个具体不存在的时候,她的真爱会延续到 另一个具体,因为她在婚姻中的真爱从没有失去过。所以她才是幸福的而你才是痛苦的。
 人:她说过今生只爱我一个,她不会爱上别人的。
 佛:这样的话你也说过吗?
 人:我。我。。我。。。

佛:你现在看你面前香炉里的三根蜡烛,那根最亮。
 人:我真的不知道,好像都是一样的亮。
 佛:这三根蜡烛就好比是三个女人,其中一根就是你现在所爱的那个女人,芸芸众生,女人何止千百万万,你连这三根蜡烛那根最亮都不知道,都不能把你现在爱的人找出来,你为什么又能确定你现在爱的这个女人就是你生命里唯一的最后一个女人呢?
 人:我。我。。我。。。
 佛:你现在拿一根蜡烛放在你的眼前,用心看看那根最亮
 人:当然是眼前的这根最亮。
 佛:你现在把它放回原处,再看看那根最亮
 人:我真的还是看不出那根最亮。
 佛:其实你刚拿的那根蜡烛就是好比是你现在爱的那个最后的女人,所谓爱由心生,当你感觉你爱她时,你用心去看就觉的它最亮,当你把它放回原处,你却找不到最亮的一点感觉,你这种所谓的最后的唯一的爱只是镜花水月,到头来终究是一场空。
 人:哦,我懂了,你并不是要我与我的爱人离婚,你是在点化我,
 佛:看破不说破,你去吧
 人:我现在真的知道我爱的是谁了,她就是我现在的爱人。
 佛:阿弥陀佛,阿弥陀佛。

音响:有钱可以搞WIFI,如果没钱,可以跟我一样,在家里搞FM多频共享。FM模块80元,接收模块,可以自己做也可以买40元,随便到哪里都有音乐。主要是我的挂壁式平板音箱没买到,要不然,大家就可以来看看效果了。音乐无处不在,比几个插口好吧,更可以做家庭调音台,用电脑来做的哦。

要做智能家居,在墙里一定要布+5 +12 的低压线,还有一条共享低频数据线9600-115200 bps 的就可以了,供家庭控制芯片总线分段共享。所谓现有的智能家居产品,扩展能力太差了,所谓的标准智能家居协议是垃圾。布了低压线和控制线,你就可以充份发挥想象力了!

网络:强烈建议用无线网络,用WEP,最高54M家用完全够了,除非在家里搞出片,搞设计交流会,否则无线网络绝对是首选。家里电脑的位置不能被线路给定死了!现在我”恭迎圣驾”时都能调网站应用。

红外:主要是对现有的家电产品的控制,提前开空调什么的,我想还不如在外墙保暖上做文章好呢,真的有钱,也不在乎多开几个小时有什么意义。红外绝对是中看不中用的功能。

电话:反正是要布电线的,跟着布也无妨,如果要布的话,一定要用家庭电话交换机,要不然,还不如买个步步高的无绳电话,多配几个无线话机,比布线要方便。

电视:出于效果质量的考虑,是唯一必须在墙里走的线了。不过现在也有cable2RF的产品,邮购价格:60元,如果能够在1-12频道,尤其是6频道的带宽作移频到UHF里就更好的。

那样家里墙里只有市电,弱电,共享总线,才是美好世界,完美家庭。