我需要一些正则表达专家的帮助。
我有一个脚本,它给出了一个固定的模式列表。使用非常简单的正则表达式,我在目标文本中搜索模式存在。例如:
/.*TFT.*/
/.*LCD.*/
/.*ANTI-GLARE.*/
那些字符串 - TFT,LCD,ANTI-GLARE是固定的 - 我无法修改它们。好吧,问题出在ANTI-GLARE中 - 破折号将导致不匹配AntiGlare。我知道我这样做的正则表达式是这样的:
/.*ANTI-?GLARE.*/
这将匹配两种变体,但我无法修改该字符串。我的问题是: 是否有另一种方法使符号可选,而不是模式中的感叹号?
编辑 - 清除
经过一些答案和提示后,我会尝试对我的问题进行更具体的描述。 我在表格中有一个字符串:
Anti Glare
TFT
AntiGlare
LCD
通过XML我收到了一个新的模型,描述如下:
防眩
我需要确保 - 我是否有#34; Anti Glare"喜欢描述。我无法改变收到的Anti-Glare,因为有很多字符串 - 范围广泛 - 在正则表达式中构建逻辑组或任何类似的组合都是不可能的。它使用php脚本构建,如:
$rexp="/.*~.*/i";
其中〜被替换为该字符串。
$ rexp = str_replace函数('〜',$ rexp,$ COND);
其中$ cond持有当前收到的字符串
操作员可以改变〜之外的任何部分,但不能改变〜内容 - 会有数以千计
答案 0 :(得分:2)
你正在使用php,所以我们可以假设你有一个类似于接受每个字符串的数组。
这是一种做你想做的事情,如果只是打扰你:
<?php
$words = array('TFT', 'LCD', 'ANTI-GLARE');
$pattern = '/(' . str_replace('-', '-?', implode($words, '|')) . ')/i';
?>
这会生成模式/(TFT|LCD|ANTI-?GLARE)/i
,which will fit your needs。
修改强>
如评论中所述,您收到了所有可能的字符串:TFT;LCD;AntiGlare;Anti-Glare;Anti Glare
。然后你只需要用管道连接它们(正则表达式中的OR运算符)并用括号括起整个块:
$words = array('TFT', 'LCD', 'AntiGlare', 'Anti-Glare', 'Anti Glare');
$pattern = '/(' . implode($words, '|') . ')/i';
这将生成模式/(TFT|LCD|AntiGlare|Anti-Glare|Anti Glare)/i
答案 1 :(得分:1)
好吧,你不能修改那些正则表达式,但我想你可以修改文本。所以,你可以这样做。
使用带有大小写不敏感标志的正则表达式/antiglare/
,然后将其替换为ANTI-GLARE
。我希望这对你有用。我不能给你代码,因为我不知道php。