PHP正则表达式忽略特殊字符

时间:2018-01-02 16:17:00

标签: php regex laravel

在SO的帮助下,我能够为我的目的制作正则表达式,效果很好,但它完全忽略了特殊字符。

$pattern='/(?=.*\b\Q'.str_replace(' ','\E\b)(?=.*\b\Q',$requestedservice).'\E\b)/i';  
preg_match($pattern, $item)

此处$requestedservice是其尝试与数据库中的$item匹配的字符。

$itemWalk - Dance因此,如果$requestedservice也是Walk - Dance,则它不匹配,但如果$requestedservice为{ {1}}匹配。

我不确定为什么忽略Walk Dance - /等特殊字符

我正在%使用html_entity_decode,因此这不是问题。

任何指导都会非常有用。

1 个答案:

答案 0 :(得分:1)

你的单词边界对你不利。例如,如果你有.,那么你的模式是/(?=.*\b\Q.\E\b)/i,它断言文字.前后有一个字边界,而且.(?<!\w)一个非单词字符,表示在它之前和之后必须有一个单词字符。

相反,您可以使用\b代替第一个和第三个(?!\w)\b代替第二个和第四个func viewDidLoad() { super.viewDidLoad() // Set the view's delegate sceneView.delegate = self // Show statistics such as fps and timing information sceneView.showsStatistics = true // Create a new scene let scene = SCNScene() // Set the scene to the view sceneView.scene = scene sceneView.isPlaying = true // create a texture that will be applied to sphere let spriteKitScene = SKScene(size: CGSize(width: sceneView.frame.width, height: sceneView.frame.height)) spriteKitScene.scaleMode = .aspectFit let videoUrl = Bundle.main.url(forResource: "360videoname", withExtension: "mp4") let videoPlayer = AVPlayer(url: videoUrl!) let videoSpriteKitNode = SKVideoNode(avPlayer:videoPlayer) videoSpriteKitNode.position = CGPoint(x: spriteKitScene.size.width/2, y: spriteKitScene.size.height/2) videoSpriteKitNode.size = spriteKitScene.size videoSpriteKitNode.yScale = -1.0 videoSpriteKitNode.play() spriteKitScene.addChild(videoSpriteKitNode) // create a sphere and apply the texture let sphere = create(stars: SCNSphere(radius:30), and: spriteKitScene, and: nil, and: nil, and: nil, and: SCNVector3(0,0,0)) self.sceneView.scene.rootNode.addChildNode(sphere) } func create(stars geometry: SCNGeometry, and diffuse: SKScene?, and specular: UIImage?, and emission: UIImage?, and normal: UIImage?, and position: SCNVector3) -> SCNNode { let node = SCNNode() node.geometry = geometry node.geometry?.firstMaterial?.diffuse.contents = diffuse node.geometry?.firstMaterial?.specular.contents = specular node.geometry?.firstMaterial?.normal.contents = normal node.geometry?.firstMaterial?.emission.contents = emission node.position = position node.geometry?.firstMaterial?.isDoubleSided = true return node } 来明确断言没有一个词在每个需要匹配的字符串部分之前和之后的字符。