Filelocator-布尔表达式-搜索技巧-正则表达式

本文详细介绍了FileLocator Pro的搜索功能,包括布尔操作符AND、OR、NOT的用法,LIKE和REGEX操作符用于模糊和正则匹配,以及NEAR操作符实现词语的邻近搜索。此外,还讲解了LINES操作符限制搜索特定行,布尔子表达式的应用,以及如何通过设置调整搜索行为。布尔正则表达式虽然复杂,但在需要精确匹配时非常有用。文章最后给出了逐行和整个文件的搜索示例,帮助用户更好地理解和运用这些搜索技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


  如果需要对现有资料需要进行分析,就必然用到搜索工具,本文对Filelocator这个软件的搜索技巧,简单归类,转载至官方文档,方便大家查阅。

  通过使用AND、OR、NOT、NEAR、REGEX及LIKE 操作符,FileLocator Pro的布尔表达式引擎支持网页式的搜索表达式。在 选项页签 中可以将FileLocator Pro设置为对整个文件匹配(默认)或者对逐行匹配。

1.逐行示例

  表达式 work AND document 会搜索包含了 work 与 document 的行。由于FileLocator Pro 隐含带有AND,此表达式还可以写为 work document 。
  表达式 work OR document 会搜索包含’work’ 或 ‘document’ 的行。
  表达式 work NOT document 会搜索包含’work’但不包含 'document’的行。

2.整个文件示例

  表达式 work AND document 搜索包含 work 与 document 的文件。这两个词可能在同一行或者整个文件中的不同行。表达式 work NOT document 搜索文件中任何位置包含 work 但不包含 document 的文件。
  注:操作符 AND、OR和NOT必须是大写字母,否则将被作为搜索词。
  可以使用引号来搜索原义词组,如:“work document” 会搜索确切词组 work document。
  可以使用括号指定词组分组,如:表达式 work AND (document OR letter) 会搜索包含了 work且包含了 document 或 letter 的行。

3.LIKE操作符

  如果不确定搜索词的拼写,或者在搜索文本中搜索词可能会被误拼,那么可用LIKE操作符指定一个大致的搜索词。例如:LIKE necessary : 将不仅找到 necessary ,而且还有像 neccessary 这样含有稍微变化的词。可以在 配置设置 中更改相似程度。

4.NEAR操作符

  要指定在搜索文本中两个搜索词应当彼此靠近,请使用NEAR操作符。例如:work NEAR document :将仅会匹配上相距在一定字符数之内(最大字符距离可在 配置设定 中指定)的搜索词。

5.REGEX操作符

  要指定一个词组为正则表达式,请使用REGEX操作符。例如:work AND REGEX “\d{5,6}”,将会匹配上包含单词 work 以及含有正则表达式 \d{5,6} (即,含有一个5-6位数的数字)的任何文档。要指定永远都将词组作为正则表达式来对待,即不需要使用REGEX操作符,请使用布尔正则表达式类型(见下文)

6.LINES操作符

  LINES操作符针对后边的表达式限定了要搜索的行。例如:LINES:3-5 (tower AND london) 将仅在第3,第4和第5行中搜索表达式 tower AND london

7.布尔子表达式

  布尔表达式是由子表达式组成的。子表达式的类型将取决于选用的 表达式类型 。
  1.布尔 (无通配符1):完全按照输入的用每个词组进行匹配,还会匹配上部分匹配上的单词。例如:fish 将会匹配上 fish, fishing and selfish。
  2.布尔 (有通配符1):允许使用通配符’’ 和 ‘?‘字符。’?’ 将匹配上任何单个字符,而’‘将匹配上单词结束前的零个或多个字符。例如:fish* 将匹配上单词fish 、fishing 和 selfish。通配符设置还允许边界匹配,方法是通过使用字符’<’ 和 ‘>’ 指定单词的开始和结尾,例如:<fish> 将仅匹配上完整单词 fish ,不会匹配上 fishing 或 selfish 。类似地, fish> 将匹配上 fish 和 selfish 但不会匹配上 fishing ,因为单词必须以 fish 结尾。要搜索fish* 或 fish> 原始文本,请将搜索词放入引号中,如:“fish*” 或 “fish>”
  3.布尔正则表达式,将每个词组作为正则表达式。如果正则表达式包括空格或括号,那么就用引号将表达式分为一组。例如:trout.* OR “fish(es|ing)”
  4.全字匹配,完全按照输入的用每个词组来匹配。例如:fish 将仅匹配上单词 fish ,而不会匹配上 fishing 或 selfish 。
  1 在选项页签 中可以指定通配符的设置 (默认为允许通配符)。

8.示例:布尔正则表达式

  通过使用布尔正则表达式类型,可以用操作符AND、OR和NOT将各个正则表达式搜索连在一起。正则表达式是通过每一行来进行对其评估,而对这些正则表达式的结果进行了布尔表达式组合后的行为,即,是按逐行还是按整个文件可在 选项页签 中定义。
  逐行 示例:表达式 [0-9]+ AND document 搜索包含一个数字与单词 document 的行。表达式 “[a-z]+@[a-z]+” NOT “.(com|net)” 搜索带有像电子邮件地址,但不包含 .com 或 .net 的行。注意此处使用了用于表示正则表达式分组的引号(否则括号会被作为布尔表达式分组)。
  整个文件 示例:表达式 “([0-9]+.){3}[0-9]+” AND error 搜索包含IP地址以及单词 error 的文件,而它们不必在同一行出现。使用引号标出正则表达式中正则表达式类型的部分。
  注:由于布尔正则表达式搜索的复杂特性,使用它通常比使用其它表达式类型要慢。因此仅推荐在需使用其具体能力时才使用。

  合理的脚本代码可以有效的提高工作效率,减少重复劳动。

9.作者答疑

  如有疑问,敬请留言。

<think>好的,用户之前问了关于C语言中scanf和printf的占位符是否需要和变量一一对应的问题,现在他们继续问C语言中的占位符有哪些。我需要详细列举所有常见的占位符,并说明它们的用途和注意事项。 首先,用户可能是在学习C语言的基础输入输出,所以需要全面的信息。他们可能希望有一个清晰的列表,方便查阅。我应该分门别类,比如整数、浮点、字符、字符串、指针等,这样结构更清晰。 然后,我需要考虑占位符的类型对应,比如%d对应int,%hd对应short,%ld对应long。同时,要注意printf和scanf在浮点数上的区别,比如printf中%f可以用于float和double,但scanf中%f对应float,%lf对应double。这些细节必须准确,否则用户可能在使用时出错。 还有,用户可能对不常见的占位符感兴趣,比如%p用于指针地址,或者%n记录已输出的字符数。这些虽然不常用,但也是C语言的一部分,需要提到。 另外,格式化修饰符如长度、精度、对齐方式等,用户可能需要了解如何控制输出格式。例如%-10d左对齐,%04d补零,这些实用技巧能帮助他们更好地格式化输出。 还要注意用户可能混淆的地方,比如%i和%d的区别,%i可以读取不同进制的整数,而%d默认十进制。这在使用scanf时可能会有不同行为,需要特别说明。 最后,我应该提醒用户注意事项,比如类型严格匹配,避免未定义行为,以及编译器警告的重要性。可能还需要提到使用现代C标准中的安全函数,或者建议结合其他输入方法,如fgets加sscanf,来避免缓冲区溢出等问题。 总结一下,我需要提供一个结构清晰、分类明确、覆盖全面的占位符列表,同时指出常见错误和注意事项,帮助用户正确使用这些占位符,避免常见的陷阱。</think>在C语言中,**占位符**(格式说明符)用于 `printf` 和 `scanf` 等函数中,指定输入/输出数据的类型和格式。以下是常用占位符的分类和详细说明: --- ### **一、通用占位符** | 占位符 | 适用类型 | 说明 | |--------|------------------------|----------------------------------------------------------------------| | `%%` | 无 | **输出一个百分号 `%`**,例如 `printf("%%")` 输出 `%`。 | | `%n` | `int*` | **不输出内容**,而是将当前已输出的字符数写入对应变量(需指针类型)。 | --- ### **二、整数类型** | 占位符 | 类型 | 说明 | |--------|---------------------|----------------------------------------------------------------------| | `%d` | `int` | 十进制有符号整数(默认)。 | | `%i` | `int` | 十进制/八进制(前缀 `0`)/十六进制(前缀 `0x` 或 `0X`)整数(`scanf` 特有)。| | `%u` | `unsigned int` | 十进制无符号整数。 | | `%o` | `unsigned int` | 八进制无符号整数(无前缀 `0`)。 | | `%x` | `unsigned int` | 十六进制无符号整数(小写字母,如 `a-f`)。 | | `%X` | `unsigned int` | 十六进制无符号整数(大写字母,如 `A-F`)。 | #### **长度修饰符(示例)**: - `%hd`:`short int`(如 `printf("%hd", (short)5)`) - `%ld`:`long int` - `%lld`:`long long int`(C99) - `%lu`:`unsigned long int` --- ### **三、浮点类型** | 占位符 | 类型 | 说明 | |--------|---------------------|----------------------------------------------------------------------| | `%f` | `float` / `double` | 十进制浮点数(`printf` 中 `float` 会被提升为 `double`)。 | | `%e` | `float` / `double` | 科学计数法(小写 `e`,如 `3.14e+00`)。 | | `%E` | `float` / `double` | 科学计数法(大写 `E`,如 `3.14E+00`)。 | | `%g` | `float` / `double` | 自动选择 `%f` 或 `%e`(更简洁的格式)。 | | `%G` | `float` / `double` | 自动选择 `%f` 或 `%E`(大写 `E`)。 | | `%a` | `float` / `double` | 十六进制浮点数(C99,如 `0x1.8p3` 表示 12.0)。 | #### **`scanf` 的特殊性**: - `%f`:对应 `float*`(必须传递 `float` 指针)。 - `%lf`:对应 `double*`(必须用 `%lf`,`printf` 中 `%f` 和 `%lf` 等价)。 --- ### **四、字符与字符串** | 占位符 | 类型 | 说明 | |--------|---------------------|----------------------------------------------------------------------| | `%c` | `char` | 单个字符(`scanf` 中不会跳过空格)。 | | `%s` | `char*` | 字符串(`scanf` 中遇到空格终止,需确保缓冲区足够大)。 | --- ### **五、指针与地址** | 占位符 | 类型 | 说明 | |--------|---------------------|----------------------------------------------------------------------| | `%p` | `void*` | 输出指针地址(十六进制格式,如 `0x7ffeeb0c`)。 | --- ### **六、格式化修饰符(示例)** | 修饰符 | 说明 | |-----------------|----------------------------------------------------------------------| | `%5d` | 最小宽度为5字符,不足时补空格。 | | `%-10s` | 左对齐,宽度10字符。 | | `%04d` | 宽度4字符,不足时补零(如 `0023`)。 | | `%.2f` | 浮点数保留2位小数。 | | `%*d` | 忽略输入/输出中的某个值(`scanf` 中跳过该字段)。 | --- ### **七、注意事项** 1. **类型严格匹配**:占位符必须与变量类型一致,否则会导致未定义行为(如用 `%d` 输出 `float`)。 2. **`scanf` 的指针要求**:`scanf` 必须传递变量地址(如 `&num`),字符串除外(`%s` 直接传 `char*`)。 3. **缓冲区溢出风险**:`scanf("%s", str)` 可能溢出,建议用 `%Ns`(如 `%10s`)限制长度。 4. **编译器警告**:开启 `-Wall` 选项(如 `gcc -Wall`)可检测类型不匹配问题。 --- ### **示例代码** ```c int num = 42; float pi = 3.1415926; char str[] = "Hello"; printf("整数: %d, 浮点数: %.2f, 字符串: %s\n", num, pi, str); scanf("%d %f %5s", &num, &pi, str); // 限制字符串最多读5字符 ``` 如果需要更安全的输入,建议使用 `fgets` + `sscanf` 组合。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值